Index: src/benchmark/create_pthrd.c
===================================================================
--- src/benchmark/create_pthrd.c	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/benchmark/create_pthrd.c	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -17,13 +17,10 @@
 
 	for (size_t i = 0; i < n; i++) {
-		pthread_attr_t attr;
-		if (pthread_attr_init(&attr) < 0) {
+		pthread_t thread;
+		if (pthread_create(&thread, NULL, foo, NULL) < 0) {
 			return 1;
 		}
-		if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) < 0) {
-			return 1;
-		}
-		pthread_t thread;
-		if (pthread_create(&thread, &attr, foo, NULL) < 0) {
+
+		if (pthread_join( thread, NULL) < 0) {
 			return 1;
 		}
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/libcfa/concurrency/kernel.c	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -60,4 +60,5 @@
 volatile thread_local coroutine_desc * this_coroutine;
 volatile thread_local thread_desc * this_thread;
+volatile thread_local bool preemption_in_progress = 0;
 volatile thread_local unsigned short disable_preempt_count = 1;
 
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/libcfa/concurrency/kernel_private.h	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -79,4 +79,5 @@
 extern volatile thread_local coroutine_desc * this_coroutine;
 extern volatile thread_local thread_desc * this_thread;
+extern volatile thread_local bool preemption_in_progress;
 extern volatile thread_local unsigned short disable_preempt_count;
 
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/libcfa/concurrency/preemption.c	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -180,5 +180,5 @@
 
 static inline bool preemption_ready() {
-	return disable_preempt_count == 0;
+	return disable_preempt_count == 0 && !preemption_in_progress;
 }
 
@@ -218,4 +218,6 @@
 
 void kernel_stop_preemption() {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopping\n");
+
 	sigset_t mask;
 	sigfillset( &mask );
@@ -248,5 +250,8 @@
 	LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); )
 	if( preemption_ready() ) {
+		preemption_in_progress = true;
 		signal_unblock( SIGUSR1 );
+		this_processor->pending_preemption = false;
+		preemption_in_progress = false;
 		BlockInternal( (thread_desc*)this_thread );
 	}
@@ -255,26 +260,4 @@
 	}
 }
-
-// void sigHandler_alarm( __CFA_SIGPARMS__ ) {
-// 	LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); )
-// 	verify( this_processor == systemProcessor );
-
-// 	if( try_lock( &systemProcessor->alarm_lock DEBUG_CTX2 ) ) {
-// 		tick_preemption();
-// 		systemProcessor->pending_alarm = false;
-// 		unlock( &systemProcessor->alarm_lock );
-// 	}
-// 	else {
-// 		defer_alarm();
-// 	}
-
-// 	signal_unblock( SIGALRM );
-
-// 	if( preemption_ready() && this_processor->pending_preemption ) {
-
-// 		this_processor->pending_preemption = false;
-// 		BlockInternal( (thread_desc*)this_thread );
-// 	}
-// }
 
 void * alarm_loop( __attribute__((unused)) void * args ) {
Index: src/tests/preempt_longrun/Makefile.am
===================================================================
--- src/tests/preempt_longrun/Makefile.am	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/tests/preempt_longrun/Makefile.am	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -16,5 +16,5 @@
 
 repeats=10
-max_time=30
+max_time=600
 preempt=1_000ul
 
Index: src/tests/preempt_longrun/Makefile.in
===================================================================
--- src/tests/preempt_longrun/Makefile.in	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/tests/preempt_longrun/Makefile.in	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -449,5 +449,5 @@
 top_srcdir = @top_srcdir@
 repeats = 10
-max_time = 30
+max_time = 600
 preempt = 1_000ul
 REPEAT = ${abs_top_srcdir}/tools/repeat -s
Index: src/tests/preempt_longrun/create.c
===================================================================
--- src/tests/preempt_longrun/create.c	(revision 35b06a852dd54a2edc920453617b9908074e6397)
+++ src/tests/preempt_longrun/create.c	(revision d6ff3ffe233bdce51812ab9635b616b629ab09af)
@@ -15,4 +15,5 @@
 
 int main(int argc, char* argv[]) {
+	processor p;
 	for(int i = 0; i < 10_000ul; i++) {
 		worker_t w[7];
