summaryrefslogtreecommitdiff
path: root/libusb/os/sunos_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'libusb/os/sunos_usb.c')
-rw-r--r--libusb/os/sunos_usb.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libusb/os/sunos_usb.c b/libusb/os/sunos_usb.c
index 70e1383..ecd4aad 100644
--- a/libusb/os/sunos_usb.c
+++ b/libusb/os/sunos_usb.c
@@ -1360,9 +1360,15 @@ solaris_submit_ctrl_on_default(struct libusb_transfer *transfer)
}
usbi_dbg("Done: ctrl data bytes %d", ret);
- /* sync transfer handling */
+ /**
+ * Sync transfer handling.
+ * We should release transfer lock here and later get it back
+ * as usbi_handle_transfer_completion() takes its own transfer lock.
+ */
+ usbi_mutex_unlock(&LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer)->lock);
ret = usbi_handle_transfer_completion(LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer),
transfer->status);
+ usbi_mutex_lock(&LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer)->lock);
return (ret);
}