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);