Index: kernel/test/synch/rwlock4.c
===================================================================
--- kernel/test/synch/rwlock4.c	(revision 96348adc5fd6e05c187a0b5ada4b3c219815b609)
+++ kernel/test/synch/rwlock4.c	(revision cce6acfce7ba5aa42cbdb62bd49db143e53fdcf4)
@@ -35,5 +35,4 @@
 #include <arch/context.h>
 #include <context.h>
-#include <panic.h>
 
 #include <synch/waitq.h>
@@ -46,4 +45,5 @@
 
 static rwlock_t rwlock;
+static atomic_t threads_fault;
 
 SPINLOCK_INITIALIZE(rw_lock);
@@ -79,7 +79,15 @@
 	printf("cpu%d, tid %d w=\n", CPU->id, THREAD->tid);
 
-	if (rwlock.readers_in) panic("Oops.");
+	if (rwlock.readers_in) {
+		printf("Oops.");
+		atomic_inc(&threads_fault);
+		return;
+	}
 	thread_usleep(random(1000000));
-	if (rwlock.readers_in) panic("Oops.");	
+	if (rwlock.readers_in) {
+		printf("Oops.");	
+		atomic_inc(&threads_fault);
+		return;
+	}
 
 	rwlock_write_unlock(&rwlock);
@@ -113,4 +121,5 @@
 	waitq_initialize(&can_start);
 	rwlock_initialize(&rwlock);
+	atomic_set(&threads_fault, 0);
 	
 	thread_t *thrd;
@@ -131,5 +140,5 @@
 	k = random(5) + 1;
 	printf("Creating %d writers\n", k);
-	for (i=0; i<k; i++) {
+	for (i = 0; i < k; i++) {
 		thrd = thread_create(writer, NULL, TASK, 0, "writer");
 		if (thrd)
@@ -142,4 +151,7 @@
 	waitq_wakeup(&can_start, WAKEUP_ALL);
 	
-	return NULL;
+	if (atomic_get(&threads_fault) == 0)
+		return NULL;
+	
+	return "Test failed";
 }
