Index: uspace/lib/usbhost/src/utility.c
===================================================================
--- uspace/lib/usbhost/src/utility.c	(revision 53fdf8cbac47a41c493c58222638a856360e9a84)
+++ uspace/lib/usbhost/src/utility.c	(revision 77ded6479f035365c8b7da6e4b64aa1470e1f159)
@@ -297,4 +297,5 @@
 {
 	joinable_fibril_t *jf = arg;
+
 	jf->worker(jf->arg);
 
@@ -315,10 +316,4 @@
 		return NULL;
 
-	jf->fid = fibril_create(joinable_fibril_worker, jf);
-	if (!jf->fid) {
-		free(jf);
-		return NULL;
-	}
-
 	jf->worker = worker;
 	jf->arg = arg;
@@ -326,7 +321,11 @@
 	fibril_condvar_initialize(&jf->dead_cv);
 
+	if (joinable_fibril_recreate(jf)) {
+		free(jf);
+		return NULL;
+	}
+
 	return jf;
 }
-
 
 /**
@@ -353,4 +352,17 @@
 		fibril_condvar_wait(&jf->dead_cv, &jf->guard);
 	fibril_mutex_unlock(&jf->guard);
+
+	jf->fid = 0;
+}
+
+/**
+ * Reinitialize a joinable fibril.
+ */
+errno_t joinable_fibril_recreate(joinable_fibril_t *jf)
+{
+	assert(!jf->fid);
+
+	jf->fid = fibril_create(joinable_fibril_worker, jf);
+	return jf->fid ? EOK : ENOMEM;
 }
 
