Hi On Mon, Aug 20, 2018 at 2:06 PM Frediano Ziglio <fziglio@xxxxxxxxxx> wrote: > > Without proper testing I would say Nack. > I though we agreed on this. I have done manual testing. We don't have any smartcard channel test in spice, afaik. What you asked me about disabling the device from the guest is unrelated to this change imho. Please reconsider merging this, it is not changing any current logic, just informing qemu about channel state to avoid useless work. > > Frediano > > > > > ping > > On Tue, Aug 7, 2018 at 5:27 PM <marcandre.lureau@xxxxxxxxxx> wrote: > > > > > > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > > > > > Follow all other char devices implementation (spicevmc, agent, > > > stream-device) and set the char device state when > > > connected/disconnected. This allows qemu to discard writes, optimize a > > > bit the source polling, and will trigger HUP events. > > > > > > See related qemu "char/spice: discard write() if backend is > > > disconnected". > > > > > > Note: sif->state() should probably be handled at the char-device > > > level. I am not sure what the smartcard channel really brings over > > > plain spicevmc... > > > > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > > --- > > > server/smartcard.c | 15 +++++++++++++++ > > > 1 file changed, 15 insertions(+) > > > > > > diff --git a/server/smartcard.c b/server/smartcard.c > > > index 2cb68e06..403805a8 100644 > > > --- a/server/smartcard.c > > > +++ b/server/smartcard.c > > > @@ -343,6 +343,11 @@ void > > > smartcard_char_device_attach_client(SpiceCharDeviceInstance *char_device, > > > dev->priv->scc = NULL; > > > smartcard_channel_client_set_char_device(scc, NULL); > > > red_channel_client_disconnect(RED_CHANNEL_CLIENT(scc)); > > > + } else { > > > + SpiceCharDeviceInterface *sif = > > > spice_char_device_get_interface(char_device); > > > + if (sif->state) { > > > + sif->state(char_device, 1); > > > + } > > > } > > > } > > > > > > @@ -373,11 +378,21 @@ gboolean > > > smartcard_char_device_notify_reader_remove(RedCharDeviceSmartcard *dev) > > > void smartcard_char_device_detach_client(RedCharDeviceSmartcard > > > *smartcard, > > > SmartCardChannelClient *scc) > > > { > > > + SpiceCharDeviceInterface *sif; > > > + SpiceCharDeviceInstance *sin; > > > + > > > + g_object_get(smartcard, "sin", &sin, NULL); > > > + sif = spice_char_device_get_interface(sin); > > > + > > > spice_assert(smartcard->priv->scc == scc); > > > red_char_device_client_remove(RED_CHAR_DEVICE(smartcard), > > > red_channel_client_get_client(RED_CHANNEL_CLIENT(scc))); > > > smartcard_channel_client_set_char_device(scc, NULL); > > > smartcard->priv->scc = NULL; > > > + > > > + if (sif->state) { > > > + sif->state(sin, 0); > > > + } > > > } > > > > > > SmartCardChannelClient* > > > smartcard_char_device_get_client(RedCharDeviceSmartcard *smartcard) > > > -- > > > 2.18.0.547.g1d89318c48 > > > > > > _______________________________________________ > > > Spice-devel mailing list > > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > > > > > > > > -- > > Marc-André Lureau > > _______________________________________________ > > Spice-devel mailing list > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > > -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel