aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/queues
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/queues')
-rw-r--r--src/charon/queues/event_queue.c19
-rw-r--r--src/charon/queues/job_queue.c9
-rw-r--r--src/charon/queues/send_queue.c10
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)