diff options
-rw-r--r-- | libusb/io.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libusb/io.c b/libusb/io.c index 6ed19c1..4e85bdf 100644 --- a/libusb/io.c +++ b/libusb/io.c @@ -1145,7 +1145,21 @@ API_EXPORTED void libusb_unlock_events(void) */ API_EXPORTED int libusb_event_handler_active(void) { - return event_handler_active; + int r; + + if (!event_handler_active) + return 0; + + /* FIXME: temporary hack to ensure thread didn't quit (e.g. due to signal) + * without libusb_unlock_events being triggered */ + r = pthread_mutex_trylock(&events_lock); + if (r == 0) { + event_handler_active = 0; + pthread_mutex_unlock(&events_lock); + return 0; + } + + return 1; } /** \ingroup poll |