ACK. Christophe On Sat, Dec 20, 2014 at 01:09:24AM +0100, Marc-André Lureau wrote: > Quite annoyingly, usbredir doesn't have public functions arguments > preconditions, and will weirdly run the flush callback during > initialization. > > With 201a8c2 change, the channel state is kept as it is when calling > reset. This will result in the following crash that was avoided before > thanks to a precondition on the channel to be ready. Adding a further > precondition check on priv->host != NULL solves the following crash > during reset(): > > Program received signal SIGSEGV, Segmentation fault. > usbredirhost_write_guest_data (host=0x0) at usbredirhost.c:868 > 868 return > usbredirparser_do_write(host->parser); > (gdb) bt > #0 0x00007fffb2ed24d0 in usbredirhost_write_guest_data (host=0x0) at > #usbredirhost.c:868 > #1 0x00007fffc81d463b in > #usbredir_write_flush_callback (user_data=0x2d95250) at > #channel-usbredir.c:469 > #2 0x00007fffb2ed23f9 in usbredirhost_open_full (usb_ctx=0x2baba70, > #usb_dev_handle=0x0, log_func=<optimized out>, > #read_guest_data_func=0x7fffc81d482c <usbredir_read_callback>, > #write_guest_data_func=0x7fffc81d4952 <usbredir_write_callback>, > #flush_writes_func=0x7fffc81d45c3 <usbredir_write_flush_callback>, > #alloc_lock_func=0x7fffc81d49f1 <usbredir_alloc_lock>, > #lock_func=0x7fffc81d4a41 <usbredir_lock_lock>, > #unlock_func=0x7fffc81d4a86 <usbredir_unlock_lock>, > #free_lock_func=0x7fffc81d4acb <usbredir_free_lock>, > #func_priv=0x2d95250, version=0x7fffc8283dcf "spice-gtk > #0.27.7-89db-dirty", verbose=4, flags=1) at usbredirhost.c:748 > #3 0x00007fffc81d3b22 in > #spice_usbredir_channel_set_context (channel=0x2d95250 > #[SpiceUsbredirChannel], context=0x2baba70) at channel-usbredir.c:212 > #4 0x00007fffc81d37a9 in spice_usbredir_channel_reset (c=0x2d95250 > #[SpiceUsbredirChannel], migrating=0) > at channel-usbredir.c:125 > #5 0x00007fffc81b7f8d in spice_channel_reset (channel=0x2d95250 > [SpiceUsbredirChannel], migrating=0) > at spice-channel.c:2688 > #6 0x00007fffc81b8057 in channel_disconnect (channel=0x2d95250 > [SpiceUsbredirChannel]) at spice-channel.c:2706 > #7 0x00007fffc81b7559 in > spice_channel_coroutine (data=0x2d95250) at spice-channel.c:2490 > --- > gtk/channel-usbredir.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/gtk/channel-usbredir.c b/gtk/channel-usbredir.c > index 5238566..b1a91fb 100644 > --- a/gtk/channel-usbredir.c > +++ b/gtk/channel-usbredir.c > @@ -466,6 +466,9 @@ static void usbredir_write_flush_callback(void *user_data) > SPICE_CHANNEL_STATE_READY) > return; > > + if (!priv->host) > + return; > + > usbredirhost_write_guest_data(priv->host); > } > > -- > 2.1.0 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
pgp0We44ZiEF3.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel