diff options
author | Martin Willi <martin@revosec.ch> | 2011-05-04 16:09:08 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2011-05-16 15:24:15 +0200 |
commit | c6089e252de1f72c39f8d702762f50292aea7206 (patch) | |
tree | 90477bf57636e528f89659ddc43567340ad919bf /src | |
parent | 0b04bdde30057b012aa0970a03e6fa81ffba0647 (diff) | |
download | strongswan-c6089e252de1f72c39f8d702762f50292aea7206.tar.bz2 strongswan-c6089e252de1f72c39f8d702762f50292aea7206.tar.xz |
Added a callback_job constructor supporting custom priorities
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/processing/jobs/callback_job.c | 24 | ||||
-rw-r--r-- | src/libstrongswan/processing/jobs/callback_job.h | 16 |
2 files changed, 36 insertions, 4 deletions
diff --git a/src/libstrongswan/processing/jobs/callback_job.c b/src/libstrongswan/processing/jobs/callback_job.c index 2881775b9..26afea319 100644 --- a/src/libstrongswan/processing/jobs/callback_job.c +++ b/src/libstrongswan/processing/jobs/callback_job.c @@ -88,6 +88,11 @@ struct private_callback_job_t { * without risking that it gets freed too early during destruction. */ 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, private_callback_job_t *this) { - return JOB_PRIO_MEDIUM; + return this->prio; } /* * 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) +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) { 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(), .parent = (private_callback_job_t*)parent, .destroyable = condvar_create(CONDVAR_TYPE_DEFAULT), + .prio = prio, ); /* register us at parent */ @@ -271,3 +277,13 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data, 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); +} diff --git a/src/libstrongswan/processing/jobs/callback_job.h b/src/libstrongswan/processing/jobs/callback_job.h index 1eb5664d3..3e92b01c0 100644 --- a/src/libstrongswan/processing/jobs/callback_job.h +++ b/src/libstrongswan/processing/jobs/callback_job.h @@ -120,4 +120,20 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data, callback_job_cleanup_t cleanup, 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_ @}*/ |