Index: uspace/drv/bus/usb/usbhub/usbhub.c
===================================================================
--- uspace/drv/bus/usb/usbhub/usbhub.c	(revision 2755a6222927b4514b9f31eecc12a8b336d4a24f)
+++ uspace/drv/bus/usb/usbhub/usbhub.c	(revision 740dafcdd0499e1f3387b2bd26ce4b4d7e9f1bae)
@@ -627,5 +627,4 @@
 			async_usleep(500000);
 			fibril_mutex_lock(guard);
-			err = usbhc_reserve_default_address(exch);
 		}
 		return err;
@@ -649,13 +648,17 @@
 int usb_hub_release_default_address(usb_hub_dev_t *hub, async_exch_t *exch)
 {
+	int ret = EOK;
+
 	fibril_mutex_lock(&hub->default_address_guard);
 	if (--hub->default_address_requests == 0) {
-		fibril_mutex_unlock(&hub->default_address_guard);
-		return usbhc_release_default_address(exch);
+		// We must do it in critical section to prevent other fibril
+		// from requesting the address before we release
+		ret = usbhc_release_default_address(exch);
 	} else {
 		fibril_condvar_signal(&hub->default_address_cv);
-		fibril_mutex_unlock(&hub->default_address_guard);
-		return EOK;
-	}
+	}
+	fibril_mutex_unlock(&hub->default_address_guard);
+
+	return ret;
 }
 
