[SDL] SDL_SemWaitTimeout and sem_timedwait

Jared Krinke jared.krinke at gmail.com
Sun Feb 19 12:20:07 PST 2012


Greetings,

Using SDL 1.2.15 on Linux, I'm trying to understand
SDL_SemWaitTimeout's behavior. It appears to return -1 when I was
expecting SDL_MUTEX_TIMEDOUT.

(Note: I realize I shouldn't use SDL_SemWaitTimeout on Linux since it
can be inefficient--I'm removing this dependency--but some previously
released code of mine relies on it)

According to the documentation for SDL_SemWaitTimeout, it should
return 0 if successfully locked, SDL_MUTEX_TIMEDOUT (1) if timed out,
and -1 on error.

However, after debugging in GDB, what I see is the following:

1. SDL_SemWaitTimeout calls sem_timedwait and sem_timedwait returns -1
2. errno is set to ETIMEDOUT (110)
3. SDL_SemWaitTimeout sets the SDL error to "Connection timed out"
4. SDL_SemWaitTimeout returns -1
5. My app interprets this as a failure instead of a timeout (and
unfortunately my app doesn't handle this failure very gracefully :)

Looking at the documentation for sem_timedwait, it fails (-1) and sets
errno=ETIMEDOUT if the timeout expires.

Should this value of errno be interpreted as a timeout and return
SDL_MUTEX_TIMEDOUT from SDL_SemWaitTimeout?

Let me know if you need more info or if it's not clear what I'm asking.

Thanks in advance!

(Note: I'm not a member of this mailing list)



More information about the SDL mailing list