Fixed bug #570 SDL-1.2
authorSam Lantinga <slouken@libsdl.org>
Mon, 21 Sep 2009 07:32:26 +0000
branchSDL-1.2
changeset 420962e86ab81e3c
parent 4208 453587d6dc87
child 4210 8f501bbc3bf1
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
     1.1 --- a/src/thread/generic/SDL_syssem.c	Mon Sep 21 07:28:03 2009 +0000
     1.2 +++ b/src/thread/generic/SDL_syssem.c	Mon Sep 21 07:32:26 2009 +0000
     1.3 @@ -165,7 +165,9 @@
     1.4  		                             sem->count_lock, timeout);
     1.5  	}
     1.6  	--sem->waiters_count;
     1.7 -	--sem->count;
     1.8 +	if (retval == 0) {
     1.9 +		--sem->count;
    1.10 +	}
    1.11  	SDL_UnlockMutex(sem->count_lock);
    1.12  
    1.13  	return retval;