From be2cfc6afd3c3bb33d1922b1fe5ec504c6f1a70e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 21 Sep 2009 07:35:06 +0000 Subject: [PATCH] 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. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403844 --- src/thread/generic/SDL_syssem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/thread/generic/SDL_syssem.c b/src/thread/generic/SDL_syssem.c index b7a4ef493..9531bd88d 100644 --- a/src/thread/generic/SDL_syssem.c +++ b/src/thread/generic/SDL_syssem.c @@ -176,7 +176,9 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) sem->count_lock, timeout); } --sem->waiters_count; - --sem->count; + if (retval == 0) { + --sem->count; + } SDL_UnlockMutex(sem->count_lock); return retval;