Revert "usbredir: Disconnect USB device asynchronously"

Submitted by Qiu Wenbo on May 9, 2018, 12:39 a.m.

Details

Message ID 20180509003952.15051-1-qiuwenbo@kylinos.com.cn
State New
Headers show
Series "Revert "usbredir: Disconnect USB device asynchronously"" ( rev: 2 ) in Spice

Not browsing as part of any series.

Commit Message

Qiu Wenbo May 9, 2018, 12:39 a.m.
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@kylinos.com.cn>
---
 src/channel-usbredir.c | 48 ++++++------------------------------------
 1 file changed, 7 insertions(+), 41 deletions(-)

Patch hide | download patch | download mbox

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