Index: uspace/lib/c/generic/fibril_synch.c
===================================================================
--- uspace/lib/c/generic/fibril_synch.c	(revision 84b7384c69c1bdffd7d655791fbdf06c4772799f)
+++ uspace/lib/c/generic/fibril_synch.c	(revision 649efcd10c85afaeb282dd04ea32710ea1e24a4e)
@@ -194,4 +194,9 @@
 		f->flags &= ~FIBRIL_WRITER;
 		list_append(&wdata.wu_event.link, &frw->waiters);
+		
+		if (check_for_deadlock(&frw->oi))
+			print_deadlock(&frw->oi);
+		f->waits_for = &frw->oi;
+		
 		fibril_switch(FIBRIL_TO_MANAGER);
 	} else {
@@ -203,7 +208,8 @@
 void fibril_rwlock_write_lock(fibril_rwlock_t *frw)
 {
+	fibril_t *f = (fibril_t *) fibril_get_id();
+	
 	futex_down(&async_futex);
 	if (frw->writers || frw->readers) {
-		fibril_t *f = (fibril_t *) fibril_get_id();
 		awaiter_t wdata;
 
@@ -214,6 +220,12 @@
 		f->flags |= FIBRIL_WRITER;
 		list_append(&wdata.wu_event.link, &frw->waiters);
+		
+		if (check_for_deadlock(&frw->oi))
+			print_deadlock(&frw->oi);
+		f->waits_for = &frw->oi;
+		
 		fibril_switch(FIBRIL_TO_MANAGER);
 	} else {
+		frw->oi.owned_by = f;
 		frw->writers++;
 		futex_up(&async_futex);
@@ -234,4 +246,6 @@
 	assert(!frw->readers && !frw->writers);
 	
+	frw->oi.owned_by = NULL;
+	
 	while (!list_empty(&frw->waiters)) {
 		link_t *tmp = frw->waiters.next;
@@ -241,4 +255,6 @@
 		wdp = list_get_instance(tmp, awaiter_t, wu_event.link);
 		f = (fibril_t *) wdp->fid;
+		
+		f->waits_for = NULL;
 		
 		if (f->flags & FIBRIL_WRITER) {
@@ -250,4 +266,5 @@
 			fibril_add_ready(wdp->fid);
 			frw->writers++;
+			frw->oi.owned_by = f;
 			optimize_execution_power();
 			break;
