Index: uspace/lib/c/generic/async/client.c
===================================================================
--- uspace/lib/c/generic/async/client.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/async/client.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -189,4 +189,9 @@
 	fibril_mutex_initialize(&session_ns.mutex);
 	session_ns.exchanges = 0;
+}
+
+void __async_client_fini(void)
+{
+	fibril_rmutex_destroy(&message_mutex);
 }
 
Index: uspace/lib/c/generic/async/ports.c
===================================================================
--- uspace/lib/c/generic/async/ports.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/async/ports.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -299,2 +299,7 @@
 		abort();
 }
+
+void __async_ports_fini(void)
+{
+	fibril_rmutex_destroy(&interface_mutex);
+}
Index: uspace/lib/c/generic/async/server.c
===================================================================
--- uspace/lib/c/generic/async/server.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/async/server.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -1028,4 +1028,10 @@
 }
 
+void __async_server_fini(void)
+{
+	fibril_rmutex_destroy(&client_mutex);
+	fibril_rmutex_destroy(&notification_mutex);
+}
+
 errno_t async_accept_0(ipc_call_t *call)
 {
Index: uspace/lib/c/generic/io/kio.c
===================================================================
--- uspace/lib/c/generic/io/kio.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/io/kio.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -60,4 +60,9 @@
 	if (futex_initialize(&kio_buffer.futex, 1) != EOK)
 		abort();
+}
+
+void __kio_fini(void)
+{
+	futex_destroy(&kio_buffer.futex);
 }
 
Index: uspace/lib/c/generic/libc.c
===================================================================
--- uspace/lib/c/generic/libc.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/libc.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -153,4 +153,18 @@
 }
 
+void __libc_fini(void)
+{
+	__async_client_fini();
+	__async_server_fini();
+	__async_ports_fini();
+
+	__fibril_synch_fini();
+	__fibrils_fini();
+
+	__malloc_fini();
+
+	__kio_fini();
+}
+
 void __libc_exit(int status)
 {
Index: uspace/lib/c/generic/malloc.c
===================================================================
--- uspace/lib/c/generic/malloc.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/malloc.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -489,4 +489,9 @@
 	if (!area_create(PAGE_SIZE))
 		abort();
+}
+
+void __malloc_fini(void)
+{
+	fibril_rmutex_destroy(&malloc_mutex);
 }
 
Index: uspace/lib/c/generic/private/async.h
===================================================================
--- uspace/lib/c/generic/private/async.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/private/async.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -95,6 +95,9 @@
 
 extern void __async_server_init(void);
+extern void __async_server_fini(void);
 extern void __async_client_init(void);
+extern void __async_client_fini(void);
 extern void __async_ports_init(void);
+extern void __async_ports_fini(void);
 
 extern errno_t async_create_port_internal(iface_t, async_port_handler_t,
Index: uspace/lib/c/generic/private/fibril.h
===================================================================
--- uspace/lib/c/generic/private/fibril.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/private/fibril.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -79,4 +79,5 @@
 
 extern void __fibrils_init(void);
+extern void __fibrils_fini(void);
 
 extern void fibril_wait_for(fibril_event_t *);
Index: uspace/lib/c/generic/private/malloc.h
===================================================================
--- uspace/lib/c/generic/private/malloc.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/private/malloc.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -37,4 +37,5 @@
 
 extern void __malloc_init(void);
+extern void __malloc_fini(void);
 
 #endif
Index: uspace/lib/c/generic/thread/fibril.c
===================================================================
--- uspace/lib/c/generic/thread/fibril.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/thread/fibril.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -882,4 +882,10 @@
 }
 
+void __fibrils_fini(void)
+{
+	futex_destroy(&fibril_futex);
+	futex_destroy(&ipc_lists_futex);
+}
+
 void fibril_usleep(usec_t timeout)
 {
Index: uspace/lib/c/generic/thread/fibril_synch.c
===================================================================
--- uspace/lib/c/generic/thread/fibril_synch.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/generic/thread/fibril_synch.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -96,4 +96,9 @@
 	if (futex_initialize(&fibril_synch_futex, 1) != EOK)
 		abort();
+}
+
+void __fibril_synch_fini(void)
+{
+	futex_destroy(&fibril_synch_futex);
 }
 
Index: uspace/lib/c/include/fibril_synch.h
===================================================================
--- uspace/lib/c/include/fibril_synch.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/include/fibril_synch.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -165,4 +165,5 @@
 
 extern void __fibril_synch_init(void);
+extern void __fibril_synch_fini(void);
 
 extern void fibril_mutex_initialize(fibril_mutex_t *);
Index: uspace/lib/c/include/io/kio.h
===================================================================
--- uspace/lib/c/include/io/kio.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/include/io/kio.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -43,4 +43,5 @@
 
 extern void __kio_init(void);
+extern void __kio_fini(void);
 extern errno_t kio_write(const void *, size_t, size_t *);
 extern void kio_update(void);
Index: uspace/lib/c/include/libc.h
===================================================================
--- uspace/lib/c/include/libc.h	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/lib/c/include/libc.h	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -62,4 +62,6 @@
 	__syscall6(p1, p2, p3, p4, p5, p6, id)
 
+extern void __libc_fini(void);
+
 #endif
 
Index: uspace/srv/loader/main.c
===================================================================
--- uspace/srv/loader/main.c	(revision f4cb6c5fab0eeda943f0b98226bf10e76be11e76)
+++ uspace/srv/loader/main.c	(revision 25f6bddb8298e93b8b3c063cd5d4808e555c9d54)
@@ -59,4 +59,5 @@
 #include <vfs/vfs.h>
 #include <vfs/inbox.h>
+#include <libc.h>
 
 #ifdef CONFIG_RTLD
@@ -357,4 +358,5 @@
 	DPRINTF("Jump to entry point at %p\n", pcb.entry);
 
+	__libc_fini();
 	__tcb_reset();
 	entry_point_jmp(prog_info.finfo.entry, &pcb);
