diff options
author | Hans de Goede <hdegoede@redhat.com> | 2016-06-08 10:34:05 +0200 |
---|---|---|
committer | Nathan Hjelm <hjelmn@me.com> | 2016-08-17 12:52:40 -0600 |
commit | 9542c38cf2cbd911bd7e3ec161e564b3ae63d4fe (patch) | |
tree | 7d7d248d467519e9e07278fa3d3af98c7f77b139 | |
parent | ce59e6ea12852f25025fef5ef42da9e271049a59 (diff) | |
download | libusb-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.c | 13 |
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); |