aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-05-28 15:38:28 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-05-28 15:38:28 +0100
commit126ed2c6e94e1caee3365408d15d200332027374 (patch)
tree41140597b292c2486e87b4568ff5a57ffb21369a /src/libutil
parent58967f69668cee84a7451a14f04cae08958304fa (diff)
downloadrspamd-126ed2c6e94e1caee3365408d15d200332027374.tar.gz
rspamd-126ed2c6e94e1caee3365408d15d200332027374.zip
Add routine to generate jittered timeout.
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/util.c18
-rw-r--r--src/libutil/util.h5
2 files changed, 23 insertions, 0 deletions
diff --git a/src/libutil/util.c b/src/libutil/util.c
index 5e3e9c4e1..23451412c 100644
--- a/src/libutil/util.c
+++ b/src/libutil/util.c
@@ -2609,3 +2609,21 @@ rspamd_hash_seed (void)
return seed;
}
+
+gdouble
+rspamd_time_jitter (gdouble in, gdouble jitter)
+{
+ guint64 rnd_int;
+ double res;
+ const double transform_bias = 2.2204460492503130808472633361816e-16;
+
+ rnd_int = ottery_rand_uint64 () >> 12;
+ res = rnd_int;
+ res *= transform_bias;
+
+ if (jitter == 0) {
+ jitter = in;
+ }
+
+ return in + jitter * res;
+}
diff --git a/src/libutil/util.h b/src/libutil/util.h
index 80896083c..abc949dfc 100644
--- a/src/libutil/util.h
+++ b/src/libutil/util.h
@@ -480,4 +480,9 @@ void rspamd_init_libs (void);
*/
guint64 rspamd_hash_seed (void);
+/**
+ * Return jittered time value
+ */
+gdouble rspamd_time_jitter (gdouble in, gdouble jitter);
+
#endif