Re: [libav-devel] [PATCH 2/2] compat/w32pthreads: use the condition variable API directly when targeting newer versions of Windows
On Thu, 9 Oct 2014, James Almer wrote: Wrap the function calls in a similar fashion to how it's being done with the critical section API. Signed-off-by: James Almer --- compat/w32pthreads.h | 60 +--- 1 file changed, 38 insertions(+), 22 deletions(-) No more objections from me on this, looks good. // Martin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 2/2] compat/w32pthreads: use the condition variable API directly when targeting newer versions of Windows
On Thu, 9 Oct 2014, James Almer wrote: On 09/10/14 5:03 AM, Martin Storsjö wrote: On Wed, 8 Oct 2014, James Almer wrote: Wrap the function calls in a similar fashion to how it's being done with the critical section API. Signed-off-by: James Almer --- compat/w32pthreads.h | 63 ++-- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h index b905a95..e586ecb 100644 --- a/compat/w32pthreads.h +++ b/compat/w32pthreads.h @@ -64,32 +64,6 @@ typedef struct pthread_cond_t { } pthread_cond_t; #endif -/* function pointers to conditional variable API on windows 6.0+ kernels */ -#if _WIN32_WINNT < 0x0600 -static void (WINAPI *cond_broadcast)(pthread_cond_t *cond); -static void (WINAPI *cond_init)(pthread_cond_t *cond); -static void (WINAPI *cond_signal)(pthread_cond_t *cond); -static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t *mutex, -DWORD milliseconds); -#else -#define cond_init InitializeConditionVariable -#define cond_broadcast WakeAllConditionVariable -#define cond_signalWakeConditionVariable -#define cond_wait SleepConditionVariableCS - -#define CreateEvent(a, reset, init, name) \ -CreateEventEx(a, name, \ - (reset ? CREATE_EVENT_MANUAL_RESET : 0) | \ - (init ? CREATE_EVENT_INITIAL_SET : 0),\ - EVENT_ALL_ACCESS) -// CreateSemaphoreExA seems to be desktop-only, but as long as we don't -// use named semaphores, it doesn't matter if we use the W version. -#define CreateSemaphore(a, b, c, d) \ -CreateSemaphoreExW(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS) -#define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) -#define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) -#endif - Where did the CreateEvent/CreateSemaphore/InitializeCriticalSection/WaitForSingleObject definitions go here? When targeting desktop windows they don't matter (since the old functions still exist), but when targeting WinRT/WinPhone, the old functions are no longer available. You're right about InitializeCriticalSection and WaitForSingleObject (I somehow missed those), but the redefinition of CreateEvent and CreateSemaphore are not needed anymore since they will now be used only for the non-native version of the condition variable API, which is only compiled when _WIN32_WINT < 0x0600. Ah, I see. // Martin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 2/2] compat/w32pthreads: use the condition variable API directly when targeting newer versions of Windows
On 09/10/14 5:03 AM, Martin Storsjö wrote: > On Wed, 8 Oct 2014, James Almer wrote: > >> Wrap the function calls in a similar fashion to how it's being done >> with the critical section API. >> >> Signed-off-by: James Almer >> --- >> compat/w32pthreads.h | 63 >> ++-- >> 1 file changed, 37 insertions(+), 26 deletions(-) >> >> diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h >> index b905a95..e586ecb 100644 >> --- a/compat/w32pthreads.h >> +++ b/compat/w32pthreads.h >> @@ -64,32 +64,6 @@ typedef struct pthread_cond_t { >> } pthread_cond_t; >> #endif >> >> -/* function pointers to conditional variable API on windows 6.0+ kernels */ >> -#if _WIN32_WINNT < 0x0600 >> -static void (WINAPI *cond_broadcast)(pthread_cond_t *cond); >> -static void (WINAPI *cond_init)(pthread_cond_t *cond); >> -static void (WINAPI *cond_signal)(pthread_cond_t *cond); >> -static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t >> *mutex, >> -DWORD milliseconds); >> -#else >> -#define cond_init InitializeConditionVariable >> -#define cond_broadcast WakeAllConditionVariable >> -#define cond_signalWakeConditionVariable >> -#define cond_wait SleepConditionVariableCS >> - >> -#define CreateEvent(a, reset, init, name) \ >> -CreateEventEx(a, name, \ >> - (reset ? CREATE_EVENT_MANUAL_RESET : 0) | \ >> - (init ? CREATE_EVENT_INITIAL_SET : 0),\ >> - EVENT_ALL_ACCESS) >> -// CreateSemaphoreExA seems to be desktop-only, but as long as we don't >> -// use named semaphores, it doesn't matter if we use the W version. >> -#define CreateSemaphore(a, b, c, d) \ >> -CreateSemaphoreExW(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS) >> -#define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) >> -#define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) >> -#endif >> - > > Where did the > CreateEvent/CreateSemaphore/InitializeCriticalSection/WaitForSingleObject > definitions go here? When targeting desktop windows they don't matter (since > the old functions still exist), but when targeting WinRT/WinPhone, the old > functions are no longer available. You're right about InitializeCriticalSection and WaitForSingleObject (I somehow missed those), but the redefinition of CreateEvent and CreateSemaphore are not needed anymore since they will now be used only for the non-native version of the condition variable API, which is only compiled when _WIN32_WINT < 0x0600. I'll send a patch to put the former two back in place. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 2/2] compat/w32pthreads: use the condition variable API directly when targeting newer versions of Windows
On Wed, 8 Oct 2014, James Almer wrote: Wrap the function calls in a similar fashion to how it's being done with the critical section API. Signed-off-by: James Almer --- compat/w32pthreads.h | 63 ++-- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h index b905a95..e586ecb 100644 --- a/compat/w32pthreads.h +++ b/compat/w32pthreads.h @@ -64,32 +64,6 @@ typedef struct pthread_cond_t { } pthread_cond_t; #endif -/* function pointers to conditional variable API on windows 6.0+ kernels */ -#if _WIN32_WINNT < 0x0600 -static void (WINAPI *cond_broadcast)(pthread_cond_t *cond); -static void (WINAPI *cond_init)(pthread_cond_t *cond); -static void (WINAPI *cond_signal)(pthread_cond_t *cond); -static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t *mutex, -DWORD milliseconds); -#else -#define cond_init InitializeConditionVariable -#define cond_broadcast WakeAllConditionVariable -#define cond_signalWakeConditionVariable -#define cond_wait SleepConditionVariableCS - -#define CreateEvent(a, reset, init, name) \ -CreateEventEx(a, name, \ - (reset ? CREATE_EVENT_MANUAL_RESET : 0) | \ - (init ? CREATE_EVENT_INITIAL_SET : 0),\ - EVENT_ALL_ACCESS) -// CreateSemaphoreExA seems to be desktop-only, but as long as we don't -// use named semaphores, it doesn't matter if we use the W version. -#define CreateSemaphore(a, b, c, d) \ -CreateSemaphoreExW(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS) -#define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) -#define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) -#endif - Where did the CreateEvent/CreateSemaphore/InitializeCriticalSection/WaitForSingleObject definitions go here? When targeting desktop windows they don't matter (since the old functions still exist), but when targeting WinRT/WinPhone, the old functions are no longer available. // Martin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel