Fix sem_post() behaviour to wake up multiple waiting threads.
diff --git a/libc/bionic/semaphore.c b/libc/bionic/semaphore.c
index f4eebce..84b9314 100644
--- a/libc/bionic/semaphore.c
+++ b/libc/bionic/semaphore.c
@@ -180,7 +180,7 @@
if (sem == NULL)
return EINVAL;
- if (__atomic_inc((volatile int*)&sem->count) == 0)
+ if (__atomic_inc((volatile int*)&sem->count) >= 0)
__futex_wake(&sem->count, 1);
return 0;
diff --git a/libc/docs/CHANGES.TXT b/libc/docs/CHANGES.TXT
index 7c8f38c..f59cfab 100644
--- a/libc/docs/CHANGES.TXT
+++ b/libc/docs/CHANGES.TXT
@@ -55,6 +55,9 @@
- fix sem_trywait() to return -1 and set errno to EAGAIN, instead of
returning EAGAIN directly.
+- fix sem_post() to wake up multiple threads when called rapidly in
+ succession.
+
-------------------------------------------------------------------------------
Differences between Android 2.1 and 2.0.1: