diff options
author | Michal Zidek <mzidek@redhat.com> | 2014-07-07 16:46:18 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-07-31 11:50:24 +0200 |
commit | ab0ab5a30379b84d6e05e1f2dc457bd1dd97401f (patch) | |
tree | 53664c5eaa90baeef167a097f9522fa84abce548 /src/providers/dp_ptask.c | |
parent | b47449d8596d9573ff13e74b6984d080b414715a (diff) | |
download | sssd-ab0ab5a30379b84d6e05e1f2dc457bd1dd97401f.tar.gz sssd-ab0ab5a30379b84d6e05e1f2dc457bd1dd97401f.tar.xz sssd-ab0ab5a30379b84d6e05e1f2dc457bd1dd97401f.zip |
ptask: Allow adding random_offset to scheduled execution time
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/providers/dp_ptask.c')
-rw-r--r-- | src/providers/dp_ptask.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/providers/dp_ptask.c b/src/providers/dp_ptask.c index 8214112a0..4d0fec445 100644 --- a/src/providers/dp_ptask.c +++ b/src/providers/dp_ptask.c @@ -37,6 +37,8 @@ struct be_ptask { struct be_ctx *be_ctx; time_t period; time_t enabled_delay; + time_t random_offset; + unsigned int ro_seed; time_t timeout; enum be_ptask_offline offline; be_ptask_send_t send_fn; @@ -208,6 +210,10 @@ static void be_ptask_schedule(struct be_ptask *task, return; } + if (task->random_offset != 0) { + delay = delay + (rand_r(&task->ro_seed) % task->random_offset); + } + switch (from) { case BE_PTASK_SCHEDULE_FROM_NOW: tv = tevent_timeval_current_ofs(delay, 0); @@ -244,6 +250,7 @@ errno_t be_ptask_create(TALLOC_CTX *mem_ctx, time_t period, time_t first_delay, time_t enabled_delay, + time_t random_offset, time_t timeout, enum be_ptask_offline offline, be_ptask_send_t send_fn, @@ -270,6 +277,8 @@ errno_t be_ptask_create(TALLOC_CTX *mem_ctx, task->be_ctx = be_ctx; task->period = period; task->enabled_delay = enabled_delay; + task->random_offset = random_offset; + task->ro_seed = time(NULL) * getpid(); task->timeout = timeout; task->offline = offline; task->send_fn = send_fn; @@ -406,6 +415,7 @@ errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, time_t period, time_t first_delay, time_t enabled_delay, + time_t random_offset, time_t timeout, enum be_ptask_offline offline, be_ptask_sync_t fn, @@ -426,7 +436,7 @@ errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, ctx->pvt = pvt; ret = be_ptask_create(mem_ctx, be_ctx, period, first_delay, - enabled_delay, timeout, offline, + enabled_delay, random_offset, timeout, offline, be_ptask_sync_send, be_ptask_sync_recv, ctx, name, _task); if (ret != EOK) { |