Index: src/tests/sched-int-block.c
===================================================================
--- src/tests/sched-int-block.c	(revision be3d020e7aaa4b5a3cc415ff3d3ee2b170bbb358)
+++ src/tests/sched-int-block.c	(revision ccd349d5eff7acc3cade22b976b07d1262c15333)
@@ -10,10 +10,11 @@
 
 monitor global_data_t {
-	state_t state;
-	bool ran;
+	thread_desc * last_thread;
+	thread_desc * last_signaller;
 };
 
 void ?{} ( global_data_t * this ) {
-	this->state = BARGE;
+	this->last_thread = NULL;
+	this->last_signaller = NULL;
 }
 
@@ -28,15 +29,14 @@
 //------------------------------------------------------------------------------
 void wait_op( global_data_t * mutex a, global_data_t * mutex b, unsigned i ) {
-	wait( &cond );
-	a->ran = b->ran = true;
+	wait( &cond, (uintptr_t)this_thread() );
 
 	yield( ((unsigned)rand48()) % 10 );
 
-	if(a->state != SIGNAL || b->state != SIGNAL) {
-		sout | "ERROR Barging detected" | a->state | b->state | endl;
+	if(a->last_thread != a->last_signaller || b->last_thread != b->last_signaller ) {
+		sout | "ERROR Barging detected, expected" | a->last_signaller | b->last_signaller | "got" | a->last_thread | b->last_thread | endl;
 		abort();
 	}
 
-	a->state = b->state = WAITED;
+	a->last_thread = b->last_thread = this_thread();
 
 	yield( ((unsigned)rand48()) % 10 );
@@ -54,16 +54,19 @@
 	yield( ((unsigned)rand48()) % 10 );
 
-	a->ran = b->ran = false;
-	a->state = b->state = SIGNAL;
+	a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread();
 
-	signal_block( &cond );
+	if( !is_empty( &cond ) ) {
 
-	yield( ((unsigned)rand48()) % 10 );
+		thread_desc * next = front( &cond );
 
-	assert(a->ran == b->ran);
-	if(a->ran)
-	{
-		if(a->state != WAITED || b->state != WAITED) {
-			sout | "ERROR Barging detected" | a->state | b->state | endl;
+		if( ! signal_block( &cond ) ) {
+			sout | "ERROR expected to be able to signal" | endl;
+			abort();
+		}
+
+		yield( ((unsigned)rand48()) % 10 );
+
+		if(a->last_thread != next || b->last_thread != next) {
+			sout | "ERROR Barging detected, expected" | next | "got" | a->last_thread | b->last_thread | endl;
 			abort();
 		}
@@ -81,5 +84,5 @@
 //------------------------------------------------------------------------------
 void barge_op( global_data_t * mutex a ) {
-	a->state = BARGE;
+	a->last_thread = this_thread();
 }
 
