- allow termination of getting thread
authorMartin Willi <martin@strongswan.org>
Fri, 2 Dec 2005 14:58:45 +0000 (14:58 -0000)
committerMartin Willi <martin@strongswan.org>
Fri, 2 Dec 2005 14:58:45 +0000 (14:58 -0000)
Source/charon/queues/event_queue.c

index 7c76aa6..c641a5a 100644 (file)
@@ -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
                {