Index: src/libcfa/bits/locks.h
===================================================================
--- src/libcfa/bits/locks.h	(revision ea8b2f7e16005c4ecdb2566b748c8eb02f60f32b)
+++ src/libcfa/bits/locks.h	(revision 85b1deb20af020daa008d82abbbc54f9b152d5c0)
@@ -126,11 +126,11 @@
 
 	struct __bin_sem_t {
-		int_fast8_t     counter;
-		pthread_mutex_t lock;
-		pthread_cond_t  cond;
+		bool     		signaled;
+		pthread_mutex_t 	lock;
+		pthread_cond_t  	cond;
 	};
 
 	static inline void ?{}(__bin_sem_t & this) with( this ) {
-		counter = 0;
+		signaled = false;
 		pthread_mutex_init(&lock, NULL);
 		pthread_cond_init (&cond, NULL);
@@ -145,8 +145,8 @@
 		verify(__cfaabi_dbg_in_kernel());
 		pthread_mutex_lock(&lock);
-		if(counter != 0) {   // this must be a loop, not if!
-			pthread_cond_wait(&cond, &lock);
-		}
-		counter = 1;
+			if(!signaled) {   // this must be a loop, not if!
+				pthread_cond_wait(&cond, &lock);
+			}
+			signaled = false;
 		pthread_mutex_unlock(&lock);
 	}
@@ -154,10 +154,12 @@
 	static inline void post(__bin_sem_t & this) with( this ) {
 		verify(__cfaabi_dbg_in_kernel());
+
 		pthread_mutex_lock(&lock);
-		bool needs_signal = counter == 0;
-		counter = 1;
+			bool needs_signal = !signaled;
+			signaled = true;
 		pthread_mutex_unlock(&lock);
-		if (!needs_signal)
+
+		if (needs_signal)
 			pthread_cond_signal(&cond);
-		}
+	}
 #endif
