summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2016-06-08 10:34:05 +0200
committerNathan Hjelm <hjelmn@me.com>2016-08-17 12:52:40 -0600
commit9542c38cf2cbd911bd7e3ec161e564b3ae63d4fe (patch)
tree7d7d248d467519e9e07278fa3d3af98c7f77b139
parentce59e6ea12852f25025fef5ef42da9e271049a59 (diff)
downloadlibusb-9542c38cf2cbd911bd7e3ec161e564b3ae63d4fe.tar.gz
core: Move calculate_timeout call to add_to_flying_transfers
This cleans-up libusb_submit_transfer a bit by avoiding an error exit path with unlock calls. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--libusb/io.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/libusb/io.c b/libusb/io.c
index b3f7df0..8363628 100644
--- a/libusb/io.c
+++ b/libusb/io.c
@@ -1369,9 +1369,13 @@ static int add_to_flying_list(struct usbi_transfer *transfer)
struct usbi_transfer *cur;
struct timeval *timeout = &transfer->timeout;
struct libusb_context *ctx = ITRANSFER_CTX(transfer);
- int r = 0;
+ int r;
int first = 1;
+ r = calculate_timeout(transfer);
+ if (r)
+ return r;
+
/* if we have no other flying transfers, start the list with this one */
if (list_empty(&ctx->flying_transfers)) {
list_add(&transfer->list, &ctx->flying_transfers);
@@ -1513,13 +1517,6 @@ int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer)
itransfer->transferred = 0;
itransfer->state_flags = 0;
itransfer->timeout_flags = 0;
- r = calculate_timeout(itransfer);
- if (r < 0) {
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
- usbi_mutex_unlock(&itransfer->lock);
- return LIBUSB_ERROR_OTHER;
- }
-
r = add_to_flying_list(itransfer);
if (r) {
usbi_mutex_unlock(&ctx->flying_transfers_lock);