Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 93ad49a84b4c98526fa998394274bbd6c68b4f7d)
+++ uspace/lib/c/generic/async.c	(revision 8ff0bd25c8215c84283f8ba039f4cb58b7660280)
@@ -1777,12 +1777,29 @@
 int async_hangup(async_sess_t *sess)
 {
+	async_exch_t *exch;
+	
 	assert(sess);
 	
 	if (atomic_get(&sess->refcnt) > 0)
 		return EBUSY;
+	
+	fibril_mutex_lock(&async_sess_mutex);
 	
 	int rc = async_hangup_internal(sess->phone);
 	if (rc == EOK)
 		free(sess);
+	
+	while (!list_empty(&sess->exch_list)) {
+		exch = (async_exch_t *)
+		    list_get_instance(list_first(&sess->exch_list),
+		    async_exch_t, sess_link);
+		
+		list_remove(&exch->sess_link);
+		list_remove(&exch->global_link);
+		async_hangup_internal(exch->phone);
+		free(exch);
+	}
+	
+	fibril_mutex_unlock(&async_sess_mutex);
 	
 	return rc;
