Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision 563a36b4f6fedb8412f32920a47a9c327efe9d69)
+++ libcfa/src/concurrency/locks.hfa	(revision 9e3d123983541be9dd31f15c5ba4910a68e3f200)
@@ -126,16 +126,14 @@
 static inline void lock(mcs_spin_lock & l, mcs_spin_node & n) {
 	mcs_spin_node * prev = __atomic_exchange_n(&l.queue.tail, &n, __ATOMIC_SEQ_CST);
-	if(prev != 0p) {
-		prev->next = &n;
-		while(n.locked) Pause();
-	}
+	if(prev == 0p) return;
+	prev->next = &n;
+	while(__atomic_load_n(&n.locked, __ATOMIC_SEQ_CST)) Pause();
 }
 
 static inline void unlock(mcs_spin_lock & l, mcs_spin_node & n) {
 	mcs_spin_node * n_ptr = &n;
-	if (!__atomic_compare_exchange_n(&l.queue.tail, &n_ptr, 0p, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ) {
-		while (n.next == 0p) {}
-		n.next->locked = false;
-	}
+	if (__atomic_compare_exchange_n(&l.queue.tail, &n_ptr, 0p, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) return;
+	while (__atomic_load_n(&n.next, __ATOMIC_SEQ_CST) == 0p) {}
+	n.next->locked = false;
 }
 
