Index: abi/include/abi/syscall.h
===================================================================
--- abi/include/abi/syscall.h	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ abi/include/abi/syscall.h	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -54,4 +54,5 @@
 	SYS_WAITQ_SLEEP,
 	SYS_WAITQ_WAKEUP,
+	SYS_WAITQ_DESTROY,
 	SYS_SMC_COHERENCE,
 
Index: kernel/generic/include/synch/syswaitq.h
===================================================================
--- kernel/generic/include/synch/syswaitq.h	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ kernel/generic/include/synch/syswaitq.h	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -46,4 +46,5 @@
 extern sys_errno_t sys_waitq_sleep(cap_waitq_handle_t, uintptr_t);
 extern sys_errno_t sys_waitq_wakeup(cap_waitq_handle_t);
+extern sys_errno_t sys_waitq_destroy(cap_waitq_handle_t);
 
 #endif
Index: kernel/generic/src/synch/syswaitq.c
===================================================================
--- kernel/generic/src/synch/syswaitq.c	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ kernel/generic/src/synch/syswaitq.c	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -123,4 +123,20 @@
 }
 
+/** Destroy a waitq
+ *
+ * @param whandle  Waitq capability handle of the waitq to be destroyed.
+ *
+ * @return         Error code.
+ */
+sys_errno_t sys_waitq_destroy(cap_waitq_handle_t whandle)
+{
+	kobject_t *kobj = cap_unpublish(TASK, whandle, KOBJECT_TYPE_WAITQ);
+	if (!kobj)
+		return (sys_errno_t) ENOENT;
+	kobject_put(kobj);
+	cap_free(TASK, whandle);
+	return EOK;
+}
+
 /** Sleep in the waitq
  *
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 8a18d5b12d97994512eb8cf90665e94bad8df103)
+++ kernel/generic/src/syscall/syscall.c	(revision 269bc4590881bab4b46e9716c4d88210c42c0b30)
@@ -139,4 +139,5 @@
 	[SYS_WAITQ_SLEEP] = (syshandler_t) sys_waitq_sleep,
 	[SYS_WAITQ_WAKEUP] = (syshandler_t) sys_waitq_wakeup,
+	[SYS_WAITQ_DESTROY] = (syshandler_t) sys_waitq_destroy,
 	[SYS_SMC_COHERENCE] = (syshandler_t) sys_smc_coherence,
 
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);
