From baf6b83cfd44f948ece44020aca3f0d77221cbab Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 11 Dec 2017 16:32:48 +0000 Subject: [PATCH] Improved pthread code. --- src/wx-thread.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/wx-thread.c b/src/wx-thread.c index 1015356..1ab591f 100644 --- a/src/wx-thread.c +++ b/src/wx-thread.c @@ -77,6 +77,7 @@ typedef struct event_pthread_t { pthread_cond_t cond; pthread_mutex_t mutex; + int state; } event_pthread_t; thread_t *thread_create(void (*thread_rout)(void *param), void *param) @@ -104,6 +105,7 @@ event_t *thread_create_event() pthread_cond_init(&event->cond, NULL); pthread_mutex_init(&event->mutex, NULL); + event->state = 0; return (event_t *)event; } @@ -113,12 +115,18 @@ void thread_set_event(event_t *handle) event_pthread_t *event = (event_pthread_t *)handle; pthread_mutex_lock(&event->mutex); + event->state = 1; pthread_cond_broadcast(&event->cond); pthread_mutex_unlock(&event->mutex); } void thread_reset_event(event_t *handle) { + event_pthread_t *event = (event_pthread_t *)handle; + + pthread_mutex_lock(&event->mutex); + event->state = 0; + pthread_mutex_unlock(&event->mutex); } int thread_wait_event(event_t *handle, int timeout) @@ -144,8 +152,11 @@ int thread_wait_event(event_t *handle, int timeout) pthread_mutex_lock(&event->mutex); if (timeout == -1) - pthread_cond_wait(&event->cond, &event->mutex); - else + { + while (!event->state) + pthread_cond_wait(&event->cond, &event->mutex); + } + else if (!event->state) pthread_cond_timedwait(&event->cond, &event->mutex, &abstime); pthread_mutex_unlock(&event->mutex);