scheduler: Add method to remove all scheduled jobs

References #840.
This commit is contained in:
Tobias Brunner
2015-03-09 15:57:57 +01:00
parent 1bfa5e0cac
commit 11ac1dff9c
2 changed files with 21 additions and 5 deletions
+15 -4
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008 Tobias Brunner * Copyright (C) 2008-2015 Tobias Brunner
* Copyright (C) 2005-2006 Martin Willi * Copyright (C) 2005-2006 Martin Willi
* Copyright (C) 2005 Jan Hutter * Copyright (C) 2005 Jan Hutter
* Hochschule fuer Technik Rapperswil * Hochschule fuer Technik Rapperswil
@@ -300,16 +300,26 @@ METHOD(scheduler_t, schedule_job_ms, void,
schedule_job_tv(this, job, tv); schedule_job_tv(this, job, tv);
} }
METHOD(scheduler_t, destroy, void, METHOD(scheduler_t, flush, void,
private_scheduler_t *this) private_scheduler_t *this)
{ {
event_t *event; event_t *event;
this->condvar->destroy(this->condvar);
this->mutex->destroy(this->mutex); this->mutex->lock(this->mutex);
while ((event = remove_event(this)) != NULL) while ((event = remove_event(this)) != NULL)
{ {
event_destroy(event); event_destroy(event);
} }
this->condvar->signal(this->condvar);
this->mutex->unlock(this->mutex);
}
METHOD(scheduler_t, destroy, void,
private_scheduler_t *this)
{
flush(this);
this->condvar->destroy(this->condvar);
this->mutex->destroy(this->mutex);
free(this->heap); free(this->heap);
free(this); free(this);
} }
@@ -328,6 +338,7 @@ scheduler_t * scheduler_create()
.schedule_job = _schedule_job, .schedule_job = _schedule_job,
.schedule_job_ms = _schedule_job_ms, .schedule_job_ms = _schedule_job_ms,
.schedule_job_tv = _schedule_job_tv, .schedule_job_tv = _schedule_job_tv,
.flush = _flush,
.destroy = _destroy, .destroy = _destroy,
}, },
.heap_size = HEAP_SIZE_DEFAULT, .heap_size = HEAP_SIZE_DEFAULT,
+6 -1
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009 Tobias Brunner * Copyright (C) 2009-2015 Tobias Brunner
* Copyright (C) 2005-2007 Martin Willi * Copyright (C) 2005-2007 Martin Willi
* Copyright (C) 2005 Jan Hutter * Copyright (C) 2005 Jan Hutter
* Hochschule fuer Technik Rapperswil * Hochschule fuer Technik Rapperswil
@@ -114,6 +114,11 @@ struct scheduler_t {
*/ */
u_int (*get_job_load) (scheduler_t *this); u_int (*get_job_load) (scheduler_t *this);
/**
* Remove all scheduled jobs.
*/
void (*flush)(scheduler_t *this);
/** /**
* Destroys a scheduler object. * Destroys a scheduler object.
*/ */