From 4cd249388e4ed2ca03f1263984ab67df5030bb65 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Sun, 25 May 2008 22:59:09 +0100 Subject: Take lock before raising event waiters condition This avoids a race between the user checking for active event handler and then blocking on the condition variable --- libusb/io.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libusb/io.c b/libusb/io.c index 6a04a2e..6ed19c1 100644 --- a/libusb/io.c +++ b/libusb/io.c @@ -1045,7 +1045,9 @@ void usbi_handle_transfer_completion(struct usbi_transfer *itransfer, * this point. */ if (flags & LIBUSB_TRANSFER_FREE_TRANSFER) libusb_free_transfer(transfer); + pthread_mutex_lock(&event_waiters_lock); pthread_cond_broadcast(&event_waiters_cond); + pthread_mutex_unlock(&event_waiters_lock); } /* Similar to usbi_handle_transfer_completion() but exclusively for transfers -- cgit v1.2.1