From 9542c38cf2cbd911bd7e3ec161e564b3ae63d4fe Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 8 Jun 2016 10:34:05 +0200 Subject: [PATCH] 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 --- libusb/io.c | 13 +++++-------- 1 file 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); -- 2.7.4