<p>Hi</p><p><br></p><p>I met a dead lock in usbredir. When a device with interrupt  endpoint was plugged in, the func usbredirhost_start_interrupt_receiving may be called, which locked the host first. Then submitted the transfer and call usbi_fd_notification, which called libusb_lock_events(ctx). </p><p>Another thread "spice_usb_device_manager_usb_ev_thread" handled events from libusb. which lock the events(libusb_lock_events) first. Then func usbredirhost_buffered_packet_complete may be called which locked the host. This may cause deadlock!</p><p>I had meet this several times. I think usbredirhost should lock the event lock before lock host.</p><p><br></p><p>Thx!</p><p>Yongjian Xu.</p>