Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed bug 1426 - SDL_SemWaitTimeout returns -1 and sets error instead…
… of SDL_MUTEX_TIMEDOUT on time out

deraj 2012-02-19 19:01:08 PST

Fix to treat ETIMEDOUT as a time out instead of an error (and update the test)
  • Loading branch information
slouken committed Feb 21, 2012
1 parent 77de4c6 commit 51ecb3b
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
10 changes: 8 additions & 2 deletions src/thread/pthread/SDL_syssem.c
Expand Up @@ -144,8 +144,14 @@ int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout)
retval = sem_timedwait(&sem->sem, &ts_timeout);
while (retval == -1 && errno == EINTR);

if (retval == -1)
SDL_SetError(strerror(errno));
if (retval == -1) {
if (errno == ETIMEDOUT) {
retval = SDL_MUTEX_TIMEDOUT;
}
else {
SDL_SetError(strerror(errno));
}
}
#else
end = SDL_GetTicks() + timeout;
while ((retval = SDL_SemTryWait(sem)) == SDL_MUTEX_TIMEDOUT) {
Expand Down
7 changes: 6 additions & 1 deletion test/testsem.c
Expand Up @@ -38,12 +38,13 @@ static void TestWaitTimeout(void)
Uint32 start_ticks;
Uint32 end_ticks;
Uint32 duration;
int retval;

sem = SDL_CreateSemaphore(0);
printf("Waiting 2 seconds on semaphore\n");

start_ticks = SDL_GetTicks();
SDL_SemWaitTimeout(sem, 2000);
retval = SDL_SemWaitTimeout(sem, 2000);
end_ticks = SDL_GetTicks();

duration = end_ticks - start_ticks;
Expand All @@ -53,6 +54,10 @@ static void TestWaitTimeout(void)
printf("Wait done.\n");
else
fprintf(stderr, "Wait took %d milliseconds\n", duration);

/* Check to make sure the return value indicates timed out */
if (retval != SDL_MUTEX_TIMEDOUT)
fprintf(stderr, "SDL_SemWaitTimeout returned: %d; expected: %d\n", retval, SDL_MUTEX_TIMEDOUT);
}

int main(int argc, char **argv)
Expand Down

0 comments on commit 51ecb3b

Please sign in to comment.