aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/queues/event_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/queues/event_queue.c')
-rw-r--r--src/charon/queues/event_queue.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/charon/queues/event_queue.c b/src/charon/queues/event_queue.c
index 10f139e7a..3a5b21039 100644
--- a/src/charon/queues/event_queue.c
+++ b/src/charon/queues/event_queue.c
@@ -48,6 +48,15 @@ struct event_t {
job_t * job;
};
+/**
+ * destroy an event and its job
+ */
+static void event_destroy(event_t *event)
+{
+ event->job->destroy(event->job);
+ free(event);
+}
+
typedef struct private_event_queue_t private_event_queue_t;
/**
@@ -262,15 +271,7 @@ static void add_relative(event_queue_t *this, job_t *job, u_int32_t ms)
*/
static void event_queue_destroy(private_event_queue_t *this)
{
- event_t *event;
- while (this->list->remove_last(this->list, (void**)&event) == SUCCESS)
- {
- event->job->destroy(event->job);
- free(event);
- }
- this->list->destroy(this->list);
- pthread_mutex_destroy(&(this->mutex));
- pthread_cond_destroy(&(this->condvar));
+ this->list->destroy_function(this->list, (void*)event_destroy);
free(this);
}