diff --git a/repos/libports/src/lib/libusb/genode_usb_raw.cc b/repos/libports/src/lib/libusb/genode_usb_raw.cc
index 42672b7621..18610e8d32 100644
--- a/repos/libports/src/lib/libusb/genode_usb_raw.cc
+++ b/repos/libports/src/lib/libusb/genode_usb_raw.cc
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
#include
#include
@@ -168,6 +169,11 @@ void Usb_device::Interface::handle_events()
/* complete USB request */
[this] (Urb &urb, Usb::Tagged_packet::Return_value v)
{
+ if (v == Usb::Tagged_packet::NO_DEVICE) {
+ error("USB device has vanished, will freeze!");
+ sleep_forever();
+ }
+
if (v != Usb::Tagged_packet::OK)
error("transfer failed, return value ", (int)v);
@@ -218,6 +224,11 @@ void Usb_device::handle_events()
/* complete USB request */
[this] (Urb &urb, Usb::Tagged_packet::Return_value v)
{
+ if (v == Usb::Tagged_packet::NO_DEVICE) {
+ error("USB device has vanished, will freeze!");
+ sleep_forever();
+ }
+
if (v != Usb::Tagged_packet::OK)
error("control transfer failed, return value ", (int)v);