Merge "adb: fix deadlock."
diff --git a/client/usb_libusb.cpp b/client/usb_libusb.cpp
index fc32469..9477c56 100644
--- a/client/usb_libusb.cpp
+++ b/client/usb_libusb.cpp
@@ -427,11 +427,15 @@
 
 static int hotplug_callback(libusb_context*, libusb_device* device, libusb_hotplug_event event,
                             void*) {
-    if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED) {
-        device_connected(device);
-    } else if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) {
-        device_disconnected(device);
-    }
+    // We're called with the libusb lock taken. Call these on the main thread outside of this
+    // function so that the usb_handle mutex is always taken before the libusb mutex.
+    fdevent_run_on_main_thread([device, event]() {
+        if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED) {
+            device_connected(device);
+        } else if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) {
+            device_disconnected(device);
+        }
+    });
     return 0;
 }