|
|
|
@ -134,28 +134,29 @@ typedef struct win32_cond_t { |
|
|
|
|
volatile int is_broadcast; |
|
|
|
|
} win32_cond_t; |
|
|
|
|
|
|
|
|
|
static void pthread_cond_init(pthread_cond_t *cond, const void *unused_attr) |
|
|
|
|
static int pthread_cond_init(pthread_cond_t *cond, const void *unused_attr) |
|
|
|
|
{ |
|
|
|
|
win32_cond_t *win32_cond = NULL; |
|
|
|
|
if (cond_init) { |
|
|
|
|
cond_init(cond); |
|
|
|
|
return; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* non native condition variables */ |
|
|
|
|
win32_cond = av_mallocz(sizeof(win32_cond_t)); |
|
|
|
|
if (!win32_cond) |
|
|
|
|
return; |
|
|
|
|
return ENOMEM; |
|
|
|
|
cond->ptr = win32_cond; |
|
|
|
|
win32_cond->semaphore = CreateSemaphore(NULL, 0, 0x7fffffff, NULL); |
|
|
|
|
if (!win32_cond->semaphore) |
|
|
|
|
return; |
|
|
|
|
return ENOMEM; |
|
|
|
|
win32_cond->waiters_done = CreateEvent(NULL, TRUE, FALSE, NULL); |
|
|
|
|
if (!win32_cond->waiters_done) |
|
|
|
|
return; |
|
|
|
|
return ENOMEM; |
|
|
|
|
|
|
|
|
|
pthread_mutex_init(&win32_cond->mtx_waiter_count, NULL); |
|
|
|
|
pthread_mutex_init(&win32_cond->mtx_broadcast, NULL); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void pthread_cond_destroy(pthread_cond_t *cond) |
|
|
|
|