Index: uspace/srv/bd/hr/fge.c
===================================================================
--- uspace/srv/bd/hr/fge.c	(revision f0950d25ca930150730465e65799981bceeddc0b)
+++ uspace/srv/bd/hr/fge.c	(revision d574c11b6115bba8c33ea620b9adf56e2049b4d0)
@@ -52,4 +52,5 @@
 
 #include "fge.h"
+#include "util.h"
 
 static void *hr_fpool_make_storage(hr_fpool_t *, ssize_t *);
@@ -64,5 +65,4 @@
     size_t wu_storage_size)
 {
-	/* TODO: allow wu_storage_size to be 0 (we want to save mem) */
 	assert(max_wus > 0 && wu_storage_size > 0);
 
@@ -102,4 +102,5 @@
 		result->fibrils[i] = fibril_create(fge_fibril, result);
 		fibril_start(result->fibrils[i]);
+		/* fibril_detach(result->fibrils[i]); */
 	}
 
@@ -139,14 +140,5 @@
 	assert(wu_cnt > 0);
 
-	/*
-	 * XXX: we can also get rid of this malloc() call,
-	 * somewhat...
-	 *
-	 * Have some fgroups also pre-allocated for maximum
-	 * pre-allocation power :-)
-	 */
-	hr_fgroup_t *result = malloc(sizeof(hr_fgroup_t));
-	if (result == NULL)
-		return NULL;
+	hr_fgroup_t *result = malloc_waitok(sizeof(hr_fgroup_t));
 
 	result->reserved_cnt = 0;
@@ -169,7 +161,5 @@
 		 */
 		size_t taking = parent->wu_storage_free_count;
-		result->own_mem = malloc(parent->wu_size * (wu_cnt - taking));
-		if (result->own_mem == NULL)
-			goto bad;
+		result->own_mem = malloc_waitok(parent->wu_size * (wu_cnt - taking));
 		result->reserved_cnt = taking;
 		parent->wu_storage_free_count = 0;
@@ -178,7 +168,5 @@
 	if (result->reserved_cnt > 0) {
 		result->memslots =
-		    malloc(sizeof(size_t) * result->reserved_cnt);
-		if (result->memslots == NULL)
-			goto bad;
+		    malloc_waitok(sizeof(size_t) * result->reserved_cnt);
 	}
 
@@ -198,16 +186,4 @@
 
 	return result;
-
-bad:
-	parent->wu_storage_free_count += result->reserved_cnt;
-	fibril_mutex_unlock(&parent->lock);
-
-	if (result->memslots != NULL)
-		free(result->memslots);
-	if (result->own_mem != NULL)
-		free(result->own_mem);
-	free(result);
-
-	return NULL;
 }
 
@@ -217,4 +193,6 @@
 
 	fibril_mutex_lock(&group->lock);
+
+	assert(group->submitted < group->wu_cnt);
 
 	if (group->reserved_avail > 0) {
@@ -225,4 +203,5 @@
 		group->memslots[group->submitted] = memslot;
 	} else {
+		assert(group->own_mem != NULL);
 		storage =
 		    group->own_mem + group->pool->wu_size * group->own_used;
