Index: libcfa/src/concurrency/kernel_private.hfa
===================================================================
--- libcfa/src/concurrency/kernel_private.hfa	(revision 1e8b4b496fa22c8d23cd2e56daf4a03858942353)
+++ libcfa/src/concurrency/kernel_private.hfa	(revision 46bbcaf5b02a41281420f4eb06a9c8a6f6ff759f)
@@ -219,4 +219,5 @@
 
 	// Step 2 : acquire our local lock
+	/*paranoid*/ verify(!kernelTLS().sched_lock);
 	__atomic_acquire( &kernelTLS().sched_lock );
 	/*paranoid*/ verify(kernelTLS().sched_lock);
Index: libcfa/src/concurrency/ready_queue.cfa
===================================================================
--- libcfa/src/concurrency/ready_queue.cfa	(revision 1e8b4b496fa22c8d23cd2e56daf4a03858942353)
+++ libcfa/src/concurrency/ready_queue.cfa	(revision 46bbcaf5b02a41281420f4eb06a9c8a6f6ff759f)
@@ -201,5 +201,4 @@
 uint_fast32_t ready_mutate_lock( void ) with(*__scheduler_lock) {
 	/* paranoid */ verify( ! __preemption_enabled() );
-	/* paranoid */ verify( ! kernelTLS().sched_lock );
 
 	// Step 1 : lock global lock
@@ -207,4 +206,9 @@
 	//   to simply lock their own lock and enter.
 	__atomic_acquire( &write_lock );
+
+	// Make sure we won't deadlock ourself
+	// Checking before acquiring the writer lock isn't safe
+	// because someone else could have locked us.
+	/* paranoid */ verify( ! kernelTLS().sched_lock );
 
 	// Step 2 : lock per-proc lock
