| Summary: | SDL_SemWaitTimeout returns -1 and sets error instead of SDL_MUTEX_TIMEDOUT on time out | ||
|---|---|---|---|
| Product: | SDL | Reporter: | deraj |
| Component: | thread | Assignee: | Sam Lantinga <slouken> |
| Status: | RESOLVED FIXED | QA Contact: | Sam Lantinga <slouken> |
| Severity: | normal | ||
| Priority: | P2 | ||
| Version: | 1.2.15 | ||
| Hardware: | x86 | ||
| OS: | Linux | ||
| Attachments: | Fix to treat ETIMEDOUT as a time out instead of an error (and update the test) | ||
Fixed, thanks! http://hg.libsdl.org/SDL/rev/c787fb1b5699 |
Created attachment 824 [details] Fix to treat ETIMEDOUT as a time out instead of an error (and update the test) Using SDL 1.2.15 on Linux, SDL_SemWaitTimeout appears to return -1 when I was expecting SDL_MUTEX_TIMEDOUT. I don't see this issue on 1.2.14. 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. Assuming my analysis is correct, the attached patch should solve this problem.