[Spice-devel] [PATCH spice] smartcard: set char device state
marcandre.lureau at redhat.com
marcandre.lureau at redhat.com
Tue Aug 7 15:26:18 UTC 2018
From: Marc-André Lureau <marcandre.lureau at redhat.com>
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 at redhat.com>
---
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
More information about the Spice-devel
mailing list