# HG changeset patch # User Sam Lantinga # Date 1253518346 0 # Node ID 62e86ab81e3ceb5f0da6eac1f0be42a31e97be68 # Parent 453587d6dc8712f75acf5ff12470319312a2ddcb 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. diff -r 453587d6dc87 -r 62e86ab81e3c src/thread/generic/SDL_syssem.c --- a/src/thread/generic/SDL_syssem.c Mon Sep 21 07:28:03 2009 +0000 +++ b/src/thread/generic/SDL_syssem.c Mon Sep 21 07:32:26 2009 +0000 @@ -165,7 +165,9 @@ sem->count_lock, timeout); } --sem->waiters_count; - --sem->count; + if (retval == 0) { + --sem->count; + } SDL_UnlockMutex(sem->count_lock); return retval;