[Spice-devel] [PATCH] Revert "usbredir: Disconnect USB device asynchronously"
Jonathon Jongsma
jjongsma at redhat.com
Thu May 10 16:27:44 UTC 2018
On Mon, 2018-05-07 at 17:02 +0800, Qiu Wenbo wrote:
> 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.
Do you have a reliable way to reproduce this situation?
>
> 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
>
More information about the Spice-devel
mailing list