Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 197df9b621b2d0b67a23899280789afa9de4be84)
+++ libcfa/src/concurrency/kernel.cfa	(revision c33c2afd5cf7a95d1f682d5d339ee5787f7a223d)
@@ -196,5 +196,8 @@
 
 			if( !readyThread ) {
+				ready_schedule_lock();
 				__cfa_io_flush( this );
+				ready_schedule_unlock();
+
 				readyThread = __next_thread_slow( this->cltr );
 			}
@@ -277,5 +280,7 @@
 
 			if(this->io.pending && !this->io.dirty) {
+				ready_schedule_lock();
 				__cfa_io_flush( this );
+				ready_schedule_unlock();
 			}
 
@@ -317,5 +322,8 @@
 
 				// Don't block if we are done
-				if( __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST) ) break MAIN_LOOP;
+				if( __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST) ) {
+					ready_schedule_unlock();
+					break MAIN_LOOP;
+				}
 
 				__STATS( __tls_stats()->ready.sleep.halts++; )
@@ -939,4 +947,5 @@
 			/* paranoid */ verifyf( it, "Unexpected null iterator, at index %u of %u\n", i, count);
 			/* paranoid */ verify( it->local_data->this_stats );
+			// __print_stats( it->local_data->this_stats, cltr->print_stats, "Processor", it->name, (void*)it );
 			__tally_stats( cltr->stats, it->local_data->this_stats );
 			it = &(*it)`next;
@@ -948,4 +957,5 @@
 		// this doesn't solve all problems but does solve many
 		// so it's probably good enough
+		disable_interrupts();
 		uint_fast32_t last_size = ready_mutate_lock();
 
@@ -955,4 +965,5 @@
 		// Unlock the RWlock
 		ready_mutate_unlock( last_size );
+		enable_interrupts();
 	}
 
