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:
parent
21c6dc33a6
commit
ba276c8153
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user