Added a callback_job constructor supporting custom priorities

This commit is contained in:
Martin Willi
2011-05-16 15:24:15 +02:00
parent 0b04bdde30
commit c6089e252d
2 changed files with 36 additions and 4 deletions
@@ -88,6 +88,11 @@ struct private_callback_job_t {
* without risking that it gets freed too early during destruction. * without risking that it gets freed too early during destruction.
*/ */
sem_t *terminated; sem_t *terminated;
/**
* Priority of this job
*/
job_priority_t prio;
}; };
/** /**
@@ -230,15 +235,15 @@ METHOD(job_t, execute, void,
METHOD(job_t, get_priority, job_priority_t, METHOD(job_t, get_priority, job_priority_t,
private_callback_job_t *this) private_callback_job_t *this)
{ {
return JOB_PRIO_MEDIUM; return this->prio;
} }
/* /*
* Described in header. * Described in header.
*/ */
callback_job_t *callback_job_create(callback_job_cb_t cb, void *data, callback_job_t *callback_job_create_with_prio(callback_job_cb_t cb, void *data,
callback_job_cleanup_t cleanup, callback_job_cleanup_t cleanup, callback_job_t *parent,
callback_job_t *parent) job_priority_t prio)
{ {
private_callback_job_t *this; private_callback_job_t *this;
@@ -258,6 +263,7 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
.children = linked_list_create(), .children = linked_list_create(),
.parent = (private_callback_job_t*)parent, .parent = (private_callback_job_t*)parent,
.destroyable = condvar_create(CONDVAR_TYPE_DEFAULT), .destroyable = condvar_create(CONDVAR_TYPE_DEFAULT),
.prio = prio,
); );
/* register us at parent */ /* register us at parent */
@@ -271,3 +277,13 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
return &this->public; return &this->public;
} }
/*
* Described in header.
*/
callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
callback_job_cleanup_t cleanup,
callback_job_t *parent)
{
return callback_job_create_with_prio(cb, data, cleanup, parent,
JOB_PRIO_MEDIUM);
}
@@ -120,4 +120,20 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
callback_job_cleanup_t cleanup, callback_job_cleanup_t cleanup,
callback_job_t *parent); callback_job_t *parent);
/**
* Creates a callback job, with priority.
*
* Same as callback_job_create(), but with different priorities than default.
*
* @param cb callback to call from the processor
* @param data user data to supply to callback
* @param cleanup destructor for data on destruction, or NULL
* @param parent parent of this job
* @param prio job priority
* @return callback_job_t object
*/
callback_job_t *callback_job_create_with_prio(callback_job_cb_t cb, void *data,
callback_job_cleanup_t cleanup, callback_job_t *parent,
job_priority_t prio);
#endif /** CALLBACK_JOB_H_ @}*/ #endif /** CALLBACK_JOB_H_ @}*/