Index: uspace/lib/c/generic/fibril.c
===================================================================
--- uspace/lib/c/generic/fibril.c	(revision ec397203e399886ac45d617da8098ea6ae81f914)
+++ uspace/lib/c/generic/fibril.c	(revision 899342ee3c270924d2c01dc558d0f045339517fa)
@@ -72,4 +72,7 @@
 static void fibril_main(void)
 {
+	/* fibril_futex is locked when a fibril is first started. */
+	futex_unlock(&fibril_futex);
+
 	fibril_t *fibril = __tcb_get()->fibril_data;
 
@@ -211,6 +214,4 @@
 	}
 
-	futex_unlock(&fibril_futex);
-
 #ifdef FUTEX_UPGRADABLE
 	if (stype == FIBRIL_FROM_DEAD) {
@@ -223,4 +224,7 @@
 
 	/* Restored by another fibril! */
+
+	/* Must be after context_swap()! */
+	futex_unlock(&fibril_futex);
 
 	if (srcf->clean_after_me) {
