Index: libcfa/src/concurrency/io/setup.cfa
===================================================================
--- libcfa/src/concurrency/io/setup.cfa	(revision d61199552c4f8550ce4d335625d57b1e5aa16381)
+++ libcfa/src/concurrency/io/setup.cfa	(revision 4fc3343d30eedad8ba6af81defc9b7c688e040d3)
@@ -113,9 +113,10 @@
 
 	static struct {
-		pthread_t       thrd;    // pthread handle to io poller thread
-		void *          stack;   // pthread stack for io poller thread
-		int             epollfd; // file descriptor to the epoll instance
-		volatile bool   run;     // Whether or not to continue
-		volatile size_t epoch;   // Epoch used for memory reclamation
+		      pthread_t  thrd;    // pthread handle to io poller thread
+		      void *     stack;   // pthread stack for io poller thread
+		      int        epollfd; // file descriptor to the epoll instance
+		volatile     bool run;     // Whether or not to continue
+		volatile     bool stopped; // Whether the poller has finished running
+		volatile uint64_t epoch;   // Epoch used for memory reclamation
 	} iopoll;
 
@@ -130,7 +131,8 @@
 		__cfadbg_print_safe(io_core, "Kernel : Starting io poller thread\n" );
 
-		iopoll.run = true;
-		iopoll.stack = __create_pthread( &iopoll.thrd, iopoll_loop, 0p );
-		iopoll.epoch = 0;
+		iopoll.stack   = __create_pthread( &iopoll.thrd, iopoll_loop, 0p );
+		iopoll.run     = true;
+		iopoll.stopped = false;
+		iopoll.epoch   = 0;
 	}
 
@@ -205,4 +207,6 @@
 			}
 		}
+
+		__atomic_store_n(&iopoll.stopped, true, __ATOMIC_SEQ_CST);
 
 		__cfadbg_print_safe(io_core, "Kernel : IO poller thread stopping\n" );
@@ -536,5 +540,5 @@
 
 		// Wait for the next epoch
-		while(curr == __atomic_load_n(&iopoll.epoch, __ATOMIC_RELAXED)) yield();
+		while(curr == iopoll.epoch && !iopoll.stopped) Pause();
 	}
 
