Fixed bug #570
authorSam Lantinga <slouken@libsdl.org>
Mon, 21 Sep 2009 07:35:06 +0000
changeset 3287 77f2f10b81a7
parent 3286 d390778b59c1
child 3288 8c32cabae4f8
Fixed bug #570 SDL_SemWaitTimeout in src/thread/generic/SDL_syssem.c line 179 (SVN trunk): --sem->count; should be if (retval == 0) { --sem->count; } Without this, sem->count will underflow on timeout effectively breaking the semaphore. It appears that the implementation has been wrong since the initial revision.
src/thread/generic/SDL_syssem.c
--- a/src/thread/generic/SDL_syssem.c	Mon Sep 21 05:24:54 2009 +0000
+++ b/src/thread/generic/SDL_syssem.c	Mon Sep 21 07:35:06 2009 +0000
@@ -176,7 +176,9 @@
                                      sem->count_lock, timeout);
     }
     --sem->waiters_count;
-    --sem->count;
+    if (retval == 0) {
+        --sem->count;
+    }
     SDL_UnlockMutex(sem->count_lock);
 
     return retval;