Index: uspace/lib/c/generic/private/fibril.h
===================================================================
--- uspace/lib/c/generic/private/fibril.h	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ uspace/lib/c/generic/private/fibril.h	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -127,4 +127,5 @@
 
 extern void fibril_rmutex_initialize(fibril_rmutex_t *);
+extern void fibril_rmutex_destroy(fibril_rmutex_t *);
 extern void fibril_rmutex_lock(fibril_rmutex_t *);
 extern bool fibril_rmutex_trylock(fibril_rmutex_t *);
Index: uspace/lib/c/generic/private/futex.h
===================================================================
--- uspace/lib/c/generic/private/futex.h	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ uspace/lib/c/generic/private/futex.h	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -55,4 +55,11 @@
 
 extern void futex_initialize(futex_t *futex, int value);
+
+static inline errno_t futex_destroy(futex_t *futex)
+{
+	if (futex->whandle)
+		return __SYSCALL1(SYS_WAITQ_DESTROY, (sysarg_t) futex->whandle);
+	return EOK;
+}
 
 #ifdef CONFIG_DEBUG_FUTEX
Index: uspace/lib/c/generic/thread/fibril_synch.c
===================================================================
--- uspace/lib/c/generic/thread/fibril_synch.c	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ uspace/lib/c/generic/thread/fibril_synch.c	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -54,4 +54,9 @@
 {
 	futex_initialize(&m->futex, 1);
+}
+
+void fibril_rmutex_destroy(fibril_rmutex_t *m)
+{
+	futex_destroy(&m->futex);
 }
 
Index: uspace/lib/c/generic/thread/mpsc.c
===================================================================
--- uspace/lib/c/generic/thread/mpsc.c	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ uspace/lib/c/generic/thread/mpsc.c	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -97,5 +97,5 @@
 	}
 
-	// TODO: fibril_rmutex_destroy()
+	fibril_rmutex_destroy(&q->t_lock);
 
 	free(q);
