Index: libcfa/src/concurrency/io/setup.cfa
===================================================================
--- libcfa/src/concurrency/io/setup.cfa	(revision a00bc5b670e302caf7b7a128c32475c702fd7890)
+++ libcfa/src/concurrency/io/setup.cfa	(revision bb588251423ad82c47d9e6b59f10ef773d2fb076)
@@ -314,4 +314,7 @@
 	}
 
+	extern void signal_block( int sig );
+	extern void signal_unblock( int sig );
+
 	static void __io_create( __io_data & this, const io_context_params & params_in ) {
 		// Step 1 : call to setup
@@ -430,23 +433,19 @@
 
 		// Step 4 : eventfd
-		int efd;
-		for() {
-			efd = eventfd(0, 0);
-			if (efd < 0) {
-				if (errno == EINTR) continue;
-				abort("KERNEL ERROR: IO_URING EVENTFD - %s\n", strerror(errno));
-			}
-			break;
-		}
-
-		int ret;
-		for() {
-			ret = syscall( __NR_io_uring_register, fd, IORING_REGISTER_EVENTFD, &efd, 1);
-			if (ret < 0) {
-				if (errno == EINTR) continue;
-				abort("KERNEL ERROR: IO_URING EVENTFD REGISTER - %s\n", strerror(errno));
-			}
-			break;
-		}
+		// io_uring_register is so f*cking slow on some machine that it
+		// will never succeed if preemption isn't hard blocked
+		signal_block( SIGUSR1 );
+
+		int efd = eventfd(0, 0);
+		if (efd < 0) {
+			abort("KERNEL ERROR: IO_URING EVENTFD - %s\n", strerror(errno));
+		}
+
+		int ret = syscall( __NR_io_uring_register, fd, IORING_REGISTER_EVENTFD, &efd, 1);
+		if (ret < 0) {
+			abort("KERNEL ERROR: IO_URING EVENTFD REGISTER - %s\n", strerror(errno));
+		}
+
+		signal_unblock( SIGUSR1 );
 
 		// some paranoid checks
Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision a00bc5b670e302caf7b7a128c32475c702fd7890)
+++ libcfa/src/concurrency/preemption.cfa	(revision bb588251423ad82c47d9e6b59f10ef773d2fb076)
@@ -394,5 +394,5 @@
 
 // sigprocmask wrapper : unblock a single signal
-static inline void signal_unblock( int sig ) {
+void signal_unblock( int sig ) {
 	sigset_t mask;
 	sigemptyset( &mask );
@@ -405,5 +405,5 @@
 
 // sigprocmask wrapper : block a single signal
-static inline void signal_block( int sig ) {
+void signal_block( int sig ) {
 	sigset_t mask;
 	sigemptyset( &mask );
