1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-07 01:27:11 +03:00

sd-event: try to move each wakeup to the same spot within every 10s

In addition to the same spot within every 1min, every 1s, every 250s
This commit is contained in:
Lennart Poettering 2013-12-11 23:41:21 +01:00
parent 21c6dc33a6
commit ba276c8153

View File

@ -1379,8 +1379,9 @@ static usec_t sleep_between(sd_event *e, usec_t a, usec_t b) {
We implement this by waking up everywhere at the same time We implement this by waking up everywhere at the same time
within any given minute if we can, synchronised via the within any given minute if we can, synchronised via the
perturbation value determined from the boot ID. If we can't, perturbation value determined from the boot ID. If we can't,
then we try to find the same spot in every 1s and then 250ms then we try to find the same spot in every 10s, then 1s and
step. Otherwise, we pick the last possible time to wake up. then 250ms step. Otherwise, we pick the last possible time
to wake up.
*/ */
c = (b / USEC_PER_MINUTE) * USEC_PER_MINUTE + e->perturb; c = (b / USEC_PER_MINUTE) * USEC_PER_MINUTE + e->perturb;
@ -1391,6 +1392,17 @@ static usec_t sleep_between(sd_event *e, usec_t a, usec_t b) {
c -= USEC_PER_MINUTE; c -= USEC_PER_MINUTE;
} }
if (c >= a)
return c;
c = (b / (USEC_PER_SEC*10)) * (USEC_PER_SEC*10) + (e->perturb % (USEC_PER_SEC*10));
if (c >= b) {
if (_unlikely_(c < USEC_PER_SEC*10))
return b;
c -= USEC_PER_SEC*10;
}
if (c >= a) if (c >= a)
return c; return c;