When explicitly targeting Vista or newer (which only happens if the caller explicitly sets _WIN32_WINNT to a high enough value via the extra cflags option - otherwise configure script sets -D_WIN32_WINNT=0x0502), we already unconditionally link to the ConditionVariable functions, since 4622f11f9. Similarly use the newer -Ex versions of CreateEvent, CreateSemaphore, InitializeCriticalSection and WaitForSingleObject, that all appeared in Vista. When building Windows Store applications, the older versions of these functions aren't available, only the -Ex functions. When doing such a build, the user can set -D_WIN32_WINNT=0x0600 to forcibly use the newer functions instead.
Unified · Split
| @@ -72,6 +72,18 @@ static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t *mutex, · 71 unmodified lines | |||
| 72 | #define cond_broadcast WakeAllConditionVariable | 72 | #define cond_broadcast WakeAllConditionVariable |
| 73 | #define cond_signal WakeConditionVariable | 73 | #define cond_signal WakeConditionVariable |
| 74 | #define cond_wait SleepConditionVariableCS | 74 | #define cond_wait SleepConditionVariableCS |
| 75 | |||
| 76 | #define CreateEvent(a, reset, init, name) \ | ||
| 77 | CreateEventEx(a, name, \ | ||
| 78 | (reset ? CREATE_EVENT_MANUAL_RESET : 0) | \ | ||
| 79 | (init ? CREATE_EVENT_INITIAL_SET : 0), \ | ||
| 80 | EVENT_ALL_ACCESS) | ||
| 81 | // CreateSemaphoreExA seems to be desktop-only, but as long as we don't | ||
| 82 | // use named semaphores, it doesn't matter if we use the W version. | ||
| 83 | #define CreateSemaphore(a, b, c, d) \ | ||
| 84 | CreateSemaphoreExW(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS) | ||
| 85 | #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) | ||
| 86 | #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) | ||
| 75 | #endif | 87 | #endif |
| 76 | 88 | ||
| 77 | static unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) | 89 | static unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) |