Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision edf247ba3a611879d074799b43c41cc7dc168bb8)
+++ libcfa/src/concurrency/io.cfa	(revision d4da15359ab98a4b849ed21f5deb4e6afe2889a5)
@@ -635,5 +635,8 @@
 
 			// We can proceed to the fast path
-			if( !__alloc(ctx, &idx, 1) ) return false;
+			if( !__alloc(ctx, &idx, 1) ) {
+				/* paranoid */ verify( false ); // for now check if this happens, next time just abort the sleep.
+				return false;
+			}
 
 			// Allocation was successful
@@ -665,5 +668,5 @@
 
 			/* paranoid */ verify( sqe->user_data == (uintptr_t)&future );
-			__submit( ctx, &idx, 1, true );
+			__submit_only( ctx, &idx, 1 );
 
 			/* paranoid */ verify( proc == __cfaabi_tls.this_processor );
@@ -676,4 +679,6 @@
 			iovec iov;
 			__atomic_acquire( &proc->io.ctx->cq.lock );
+
+			__attribute__((used)) volatile bool was_reset = false;
 
 			with( proc->idle_wctx) {
@@ -687,13 +692,21 @@
 					iov.iov_len  = sizeof(eventfd_t);
 					__kernel_read(proc, *ftr, iov, evfd );
+					ftr->result = 0xDEADDEAD;
+					*((eventfd_t *)rdbuf) = 0xDEADDEADDEADDEAD;
+					was_reset = true;
 				}
 			}
 
-			__ioarbiter_flush( *proc->io.ctx );
-			ioring_syscsll( *proc->io.ctx, 1, IORING_ENTER_GETEVENTS);
+			if( !__atomic_load_n( &proc->do_terminate, __ATOMIC_SEQ_CST ) ) {
+				__ioarbiter_flush( *proc->io.ctx );
+				proc->idle_wctx.sleep_time = rdtscl();
+				ioring_syscsll( *proc->io.ctx, 1, IORING_ENTER_GETEVENTS);
+			}
 
 			ready_schedule_lock();
 			__cfa_do_drain( proc->io.ctx, proc->cltr );
 			ready_schedule_unlock();
+
+			asm volatile ("" :: "m" (was_reset));
 		}
 	#endif
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision edf247ba3a611879d074799b43c41cc7dc168bb8)
+++ libcfa/src/concurrency/kernel.cfa	(revision d4da15359ab98a4b849ed21f5deb4e6afe2889a5)
@@ -682,4 +682,6 @@
 	this->idle_wctx.sem = 1;
 
+	this->idle_wctx.wake_time = rdtscl();
+
 	eventfd_t val;
 	val = 1;
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision edf247ba3a611879d074799b43c41cc7dc168bb8)
+++ libcfa/src/concurrency/kernel.hfa	(revision d4da15359ab98a4b849ed21f5deb4e6afe2889a5)
@@ -74,4 +74,7 @@
 	// unused if not using io_uring for idle sleep
 	io_future_t * ftr;
+
+	volatile unsigned long long wake_time;
+	volatile unsigned long long sleep_time;
 };
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision edf247ba3a611879d074799b43c41cc7dc168bb8)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision d4da15359ab98a4b849ed21f5deb4e6afe2889a5)
@@ -558,4 +558,5 @@
 
 	idle_wctx.sem = 0;
+	idle_wctx.wake_time = 0;
 
 	// I'm assuming these two are reserved for standard input and output
