Hi On Thu, Jul 4, 2013 at 5:13 PM, Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > +static gboolean spice_usb_device_manager_hotplug_idle_cb(gpointer user_data) > +{ > + struct hotplug_idle_cb_args *args = user_data; > + SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(args->self); > + > + switch (args->event) { > + case LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED: > + spice_usb_device_manager_add_dev(self, args->device); > + break; > + case LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT: > + spice_usb_device_manager_remove_dev(self, > + libusb_get_bus_number(args->device), > + libusb_get_device_address(args->device)); > + break; > + } > + libusb_unref_device(args->device); > + g_free(args); > + return FALSE; > +} > + > +/* Can be called from both the main-thread as well as the event_thread */ > +static int spice_usb_device_manager_hotplug_cb(libusb_context *ctx, > + libusb_device *device, > + libusb_hotplug_event event, > + void *user_data) > +{ > + struct hotplug_idle_cb_args *args = g_malloc(sizeof(*args)); > + > + args->self = user_data; > + args->device = libusb_ref_device(device); > + args->event = event; > + g_idle_add(spice_usb_device_manager_hotplug_idle_cb, args); > + return 0; > +} > +#endif Is there a good reason not to keep a reference on the idle and data, and cancel it if self is disposed? Or add a ref of self (if that's really short-lived and safe)? The rest of the series looks good to me. -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel