Hi All, So to make sure the API is sane, and to give the hotplug stuff some extra testing, I've ported Spice's usbredir code over to it.
And everything worked in one go, until I tried to exit the spice client, at which point it hangs. The problem is that the spice usbredir code uses a thread which does: while(usb_event_thread_run) libusb_handle_events(); This thread used to get started on the first libusb_open() and stopped like this: usb_event_thread_run = 0; libusb_close(handle); /* wakes up libusb_handle_events() */ pthread_join(usb_event_thread); When closing the last device handle. But with libusb handling the hotplug, it is simply always running, until the app exits. So now we need a way to wakeup libusb_handle_events() on exit. I've considered adding a new libusb API call for this, but in the end I thought it made more sense to do the wakeup from libusb_hotplug_deregister_callback(), esp. since libusb_hotplug_deregister_callback() depends on libusb_handle_events to run atleast once to complete the deregister. So that is what this patch-set does. So now for an app using hotplug + an event thread, the exit code would look something like this: usb_event_thread_run = 0; libusb_hotplug_deregister_callback(ctx, hotplug_cb_handle); pthread_join(usb_event_thread); libusb_exit(ctx); Given that without this patch the hotplug API is essentially unusable for applications with a separate event thread, I believe we should add this to 1.0.16. It is not terribly adventurous, but I think it would be best to also do an 1.0.16rc3 with this in, and delay the actual release by a few days. If I can get an ack for this by tomorrow, I can do 1.0.16rc3 tomorrow, so people can test over the weekend. Regards, Hans ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ libusbx-devel mailing list libusbx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libusbx-devel