diff options
Diffstat (limited to '')
-rw-r--r-- | src/update-utmp/update-utmp.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index 7a8a53f7e8..e40843cf35 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -65,6 +65,8 @@ static int get_startup_monotonic_time(Context *c, usec_t *ret) { return 0; } +#define MAX_ATTEMPTS 64u + static int get_current_runlevel(Context *c) { static const struct { const int runlevel; @@ -84,12 +86,13 @@ static int get_current_runlevel(Context *c) { for (unsigned n_attempts = 0;;) { if (n_attempts++ > 0) { /* systemd might have dropped off momentarily, let's not make this an error, - * and wait some random time. Let's pick a random time in the range 0ms…250ms, + * and wait some random time. Let's pick a random time in the range 100ms…2000ms, * linearly scaled by the number of failed attempts. */ c->bus = sd_bus_flush_close_unref(c->bus); - usec_t usec = random_u64_range(UINT64_C(10) * USEC_PER_MSEC + - UINT64_C(240) * USEC_PER_MSEC * n_attempts/64); + usec_t usec = + UINT64_C(100) * USEC_PER_MSEC + + random_u64_range(UINT64_C(1900) * USEC_PER_MSEC * n_attempts / MAX_ATTEMPTS); (void) usleep_safe(usec); r = bus_connect_system_systemd(&c->bus); @@ -121,7 +124,7 @@ static int get_current_runlevel(Context *c) { sd_bus_error_has_names(&error, SD_BUS_ERROR_NO_REPLY, SD_BUS_ERROR_DISCONNECTED)) && - n_attempts < 64) { + n_attempts < MAX_ATTEMPTS) { log_debug_errno(r, "Failed to get state of %s, retrying after a slight delay: %s", e->special, bus_error_message(&error, r)); break; |