Index: tests/concurrent/signal/disjoint.cfa
===================================================================
--- tests/concurrent/signal/disjoint.cfa	(revision ab8a023135a610b712778d1172ba23c0d081999a)
+++ tests/concurrent/signal/disjoint.cfa	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
@@ -21,8 +21,10 @@
 #endif
 
+// This tests checks what happens when someone barges in the midle of the release
+// of a bulk of monitors.
+
 enum state_t { WAIT, SIGNAL, BARGE };
 
 monitor global_t {};
-global_t mut;
 
 monitor global_data_t;
@@ -33,5 +35,11 @@
 	int counter;
 	state_t state;
-} data;
+};
+
+// Use a global struct because the order needs to match with Signaller thread
+struct {
+	global_t mut;
+	global_data_t data;
+} globals;
 
 condition cond;
@@ -40,5 +48,5 @@
 
 void ?{}( global_data_t & this ) {
-	this.counter == 0;
+	this.counter = 0;
 	this.state = BARGE;
 }
@@ -59,5 +67,5 @@
 void main( Barger & this ) {
 	while( !all_done ) {
-		barge( data );
+		barge( globals.data );
 		yield();
 	}
@@ -86,5 +94,5 @@
 
 void main( Waiter & this ) {
-	while( wait( mut, data ) ) { KICK_WATCHDOG; yield(); }
+	while( wait( globals.mut, globals.data ) ) { KICK_WATCHDOG; yield(); }
 }
 
@@ -98,12 +106,12 @@
 
 void logic( global_t & mutex a ) {
-	signal( cond, a, data );
+	signal( cond, a, globals.data );
 
 	yield( random( 10 ) );
 
 	//This is technically a mutual exclusion violation but the mutex monitor protects us
-	bool running = TEST(data.counter < N) && data.counter > 0;
-	if( data.state != SIGNAL && running ) {
-		sout | "ERROR Eager signal" | data.state;
+	bool running = TEST(globals.data.counter < N) && globals.data.counter > 0;
+	if( globals.data.state != SIGNAL && running ) {
+		sout | "ERROR Eager signal" | globals.data.state;
 	}
 }
@@ -116,5 +124,5 @@
 void main( Signaller & this ) {
 	while( !all_done ) {
-		logic( mut );
+		logic( globals.mut );
 		yield();
 	}
