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) --HG-- branch : SDL-1.2
This commit is contained in:
parent
cd2bc9aa26
commit
24df9f9b0f
2 changed files with 14 additions and 3 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue