Browse Source

Do not use locking on usb callback function pthread signalling to prevent deadlock with libusb's own event lock.

nfactor-troky
Con Kolivas 11 years ago
parent
commit
a7580f1ff2
  1. 3
      usbutils.c

3
usbutils.c

@ -2213,9 +2213,7 @@ static void LIBUSB_CALL transfer_callback(struct libusb_transfer *transfer)
{ {
struct usb_transfer *ut = transfer->user_data; struct usb_transfer *ut = transfer->user_data;
mutex_lock(&ut->mutex);
pthread_cond_signal(&ut->cond); pthread_cond_signal(&ut->cond);
mutex_unlock(&ut->mutex);
} }
/* Wait for callback function to tell us it has finished the USB transfer, but /* Wait for callback function to tell us it has finished the USB transfer, but
@ -2237,7 +2235,6 @@ static int callback_wait(struct usb_transfer *ut, int *transferred, unsigned int
libusb_cancel_transfer(transfer); libusb_cancel_transfer(transfer);
/* Now wait for the callback function to be invoked. */ /* Now wait for the callback function to be invoked. */
mutex_lock(&ut->mutex);
pthread_cond_wait(&ut->cond, &ut->mutex); pthread_cond_wait(&ut->cond, &ut->mutex);
} }
ret = transfer->status; ret = transfer->status;

Loading…
Cancel
Save