[Spice-devel] [PATCH] Revert "usbredir: Disconnect USB device asynchronously"
Qiu Wenbo
qiuwenbo at kylinos.com.cn
Wed May 9 00:39:52 UTC 2018
This reverts commit 9fbf679453d8dbfe797a738cb536136599d7adab.
In some cases, remote-viewer will exit before the async function run in
another thread finish and USB devices redirected to the VM will not "pop up" to
operation system. For example, a USB disk should be auto mounted
when remote-viewer exit.
Signed-off-by: Qiu Wenbo <qiuwenbo at kylinos.com.cn>
---
src/channel-usbredir.c | 48 ++++++------------------------------------
1 file changed, 7 insertions(+), 41 deletions(-)
diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c
index 0cc5630..34c4679 100644
--- a/src/channel-usbredir.c
+++ b/src/channel-usbredir.c
@@ -121,54 +121,20 @@ static void spice_usbredir_channel_init(SpiceUsbredirChannel *channel)
}
#ifdef USE_USBREDIR
-
-static void _channel_reset_finish(SpiceUsbredirChannel *channel)
-{
- SpiceUsbredirChannelPrivate *priv = channel->priv;
-
- spice_usbredir_channel_lock(channel);
-
- usbredirhost_close(priv->host);
- priv->host = NULL;
-
- /* Call set_context to re-create the host */
- spice_usbredir_channel_set_context(channel, priv->context);
-
- spice_usbredir_channel_unlock(channel);
-}
-
-static void _channel_reset_cb(GObject *gobject,
- GAsyncResult *result,
- gpointer user_data)
-{
- SpiceChannel *spice_channel = SPICE_CHANNEL(gobject);
- SpiceUsbredirChannel *channel = SPICE_USBREDIR_CHANNEL(spice_channel);
- gboolean migrating = GPOINTER_TO_UINT(user_data);
- GError *err = NULL;
-
- _channel_reset_finish(channel);
-
- SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(spice_channel, migrating);
-
- spice_usbredir_channel_disconnect_device_finish(channel, result, &err);
- g_object_unref(result);
-}
-
static void spice_usbredir_channel_reset(SpiceChannel *c, gboolean migrating)
{
SpiceUsbredirChannel *channel = SPICE_USBREDIR_CHANNEL(c);
SpiceUsbredirChannelPrivate *priv = channel->priv;
if (priv->host) {
- if (priv->state == STATE_CONNECTED) {
- spice_usbredir_channel_disconnect_device_async(channel, NULL,
- _channel_reset_cb, GUINT_TO_POINTER(migrating));
- } else {
- _channel_reset_finish(channel);
- }
- } else {
- SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(c, migrating);
+ if (priv->state == STATE_CONNECTED)
+ spice_usbredir_channel_disconnect_device(channel);
+ usbredirhost_close(priv->host);
+ priv->host = NULL;
+ /* Call set_context to re-create the host */
+ spice_usbredir_channel_set_context(channel, priv->context);
}
+ SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(c, migrating);
}
#endif
--
2.17.0
More information about the Spice-devel
mailing list