Handle libusb events when checking if device is connected

libusb requires the application to call one of the
`libusb_handle_events` functions in order for hotplug events to actually
get dispatched. We don't need to wait for any timeout, so we use a
default timeout of 0, which should process any pending events, and then
return immediately.

A test of repeatedly disconnecting and reconnecting a virtual device
using USBIP was done, and no crashes of the daemon were observed.

Github-Issue: https://github.com/nirenjan/libx52/issues/43
update-lkm
nirenjan 2022-08-06 16:49:28 -07:00
parent b822d3aed8
commit 1a02ad22d9
1 changed files with 4 additions and 0 deletions

View File

@ -71,11 +71,15 @@ static int _x52_hotplug_callback(libusb_context *ctx,
bool libx52_is_connected(libx52_device *dev)
{
int rc;
struct timeval tv = {0};
int completed = 0;
if (!dev) {
return false;
}
/* Handle events, and then check if the hotplug callbacks have fired */
libusb_handle_events_timeout_completed(dev->ctx, &tv, &completed);
if (dev->hdl) {
if (dev->handle_registered) {