From a0fb67f500cf3d459ed133f71ef08dd4366f83ac Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Fri, 2 Dec 2005 14:58:45 +0000 Subject: [PATCH] - allow termination of getting thread --- Source/charon/queues/event_queue.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/charon/queues/event_queue.c b/Source/charon/queues/event_queue.c index 7c76aa682..c641a5a60 100644 --- a/Source/charon/queues/event_queue.c +++ b/Source/charon/queues/event_queue.c @@ -189,7 +189,15 @@ static job_t *get(private_event_queue_t *this) timeout.tv_sec = next_event->time.tv_sec; timeout.tv_nsec = next_event->time.tv_usec * 1000; + /* add mutex unlock handler for cancellation, enable cancellation */ + pthread_cleanup_push((void(*)(void*))pthread_mutex_unlock, (void*)&(this->mutex)); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate); + pthread_cond_timedwait( &(this->condvar), &(this->mutex),&timeout); + + /* reset cancellation, remove mutex-unlock handler (without executing) */ + pthread_setcancelstate(oldstate, NULL); + pthread_cleanup_pop(0); } else {