Lines Matching refs:condition
77 // Condition
78 static int pthread_cond_destroy(pthread_cond_t* const condition) {
80 ok &= (CloseHandle(condition->waiting_sem_) != 0);
81 ok &= (CloseHandle(condition->received_sem_) != 0);
82 ok &= (CloseHandle(condition->signal_event_) != 0);
86 static int pthread_cond_init(pthread_cond_t* const condition, void* cond_attr) {
88 condition->waiting_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
89 condition->received_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
90 condition->signal_event_ = CreateEvent(NULL, FALSE, FALSE, NULL);
91 if (condition->waiting_sem_ == NULL ||
92 condition->received_sem_ == NULL ||
93 condition->signal_event_ == NULL) {
94 pthread_cond_destroy(condition);
100 static int pthread_cond_signal(pthread_cond_t* const condition) {
102 if (WaitForSingleObject(condition->waiting_sem_, 0) == WAIT_OBJECT_0) {
104 ok = SetEvent(condition->signal_event_);
107 ok &= (WaitForSingleObject(condition->received_sem_, INFINITE) !=
113 static int pthread_cond_wait(pthread_cond_t* const condition,
118 if (!ReleaseSemaphore(condition->waiting_sem_, 1, NULL))
122 ok = (WaitForSingleObject(condition->signal_event_, INFINITE) ==
124 ok &= ReleaseSemaphore(condition->received_sem_, 1, NULL);