Index: libcfa/src/bits/locks.hfa
===================================================================
--- libcfa/src/bits/locks.hfa	(revision c59a34600a910c39a26acef7ab377d43d56daa06)
+++ libcfa/src/bits/locks.hfa	(revision 93f7c00114bd7512ba57b2dd0f9a9957f0241d1e)
@@ -113,13 +113,13 @@
 
 	struct __bin_sem_t {
-		bool     		signaled;
 		pthread_mutex_t 	lock;
 		pthread_cond_t  	cond;
+		int     		val;
 	};
 
 	static inline void ?{}(__bin_sem_t & this) with( this ) {
-		signaled = false;
 		pthread_mutex_init(&lock, NULL);
 		pthread_cond_init (&cond, NULL);
+		val = 0;
 	}
 
@@ -132,18 +132,21 @@
 		verify(__cfaabi_dbg_in_kernel());
 		pthread_mutex_lock(&lock);
-			if(!signaled) {   // this must be a loop, not if!
+			while(val < 1) {
 				pthread_cond_wait(&cond, &lock);
 			}
-			signaled = false;
+			val -= 1;
 		pthread_mutex_unlock(&lock);
 	}
 
 	static inline bool post(__bin_sem_t & this) with( this ) {
+		bool needs_signal = false;
+
 		pthread_mutex_lock(&lock);
-			bool needs_signal = !signaled;
-			signaled = true;
+			if(val < 1) {
+				val += 1;
+				pthread_cond_signal(&cond);
+				needs_signal = true;
+			}
 		pthread_mutex_unlock(&lock);
-
-		if (needs_signal) pthread_cond_signal(&cond);
 
 		return needs_signal;
