diff options
Diffstat (limited to 'src/charon/queues')
-rw-r--r-- | src/charon/queues/event_queue.c | 19 | ||||
-rw-r--r-- | src/charon/queues/job_queue.c | 9 | ||||
-rw-r--r-- | src/charon/queues/send_queue.c | 10 |
3 files changed, 12 insertions, 26 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); } diff --git a/src/charon/queues/job_queue.c b/src/charon/queues/job_queue.c index d33cd5ae4..2310ca6ff 100644 --- a/src/charon/queues/job_queue.c +++ b/src/charon/queues/job_queue.c @@ -114,14 +114,7 @@ static void add(private_job_queue_t *this, job_t *job) */ static void job_queue_destroy (private_job_queue_t *this) { - job_t *job; - while (this->list->remove_last(this->list, (void**)&job) == SUCCESS) - { - job->destroy(job); - } - this->list->destroy(this->list); - pthread_mutex_destroy(&(this->mutex)); - pthread_cond_destroy(&(this->condvar)); + this->list->destroy_offset(this->list, offsetof(job_t, destroy)); free(this); } diff --git a/src/charon/queues/send_queue.c b/src/charon/queues/send_queue.c index aa3ac9228..b0c77515c 100644 --- a/src/charon/queues/send_queue.c +++ b/src/charon/queues/send_queue.c @@ -120,19 +120,11 @@ static void add(private_send_queue_t *this, packet_t *packet) */ static void destroy (private_send_queue_t *this) { - packet_t *packet; - while (this->list->remove_last(this->list, (void**)&packet) == SUCCESS) - { - packet->destroy(packet); - } - this->list->destroy(this->list); - pthread_mutex_destroy(&(this->mutex)); - pthread_cond_destroy(&(this->condvar)); + this->list->destroy_offset(this->list, offsetof(packet_t, destroy)); free(this); } /* - * * Documented in header */ send_queue_t *send_queue_create(void) |