teknoraver / rpms / systemd

Forked from rpms/systemd 5 months ago
Clone

Blame 0001-update-utmp-do-not-give-up-if-the-first-attempt-at-c.patch

Zbigniew Jędrzejewski-Szmek d0973d
From 8ed12b37afea9ccc36789aad2cef0d60eb6c5073 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek d0973d
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Zbigniew Jędrzejewski-Szmek d0973d
Date: Wed, 18 Dec 2024 22:27:29 +0900
Zbigniew Jędrzejewski-Szmek d0973d
Subject: [PATCH 1/2] update-utmp: do not give up if the first attempt at
Zbigniew Jędrzejewski-Szmek d0973d
 connecting bus failed
Zbigniew Jędrzejewski-Szmek d0973d
MIME-Version: 1.0
Zbigniew Jędrzejewski-Szmek d0973d
Content-Type: text/plain; charset=UTF-8
Zbigniew Jędrzejewski-Szmek d0973d
Content-Transfer-Encoding: 8bit
Zbigniew Jędrzejewski-Szmek d0973d
Zbigniew Jędrzejewski-Szmek d0973d
Otherwise, the program exits with failure if the first attempt in run() failed:
Zbigniew Jędrzejewski-Szmek d0973d
```
Zbigniew Jędrzejewski-Szmek d0973d
Dec 18 20:27:37 systemd-update-utmp[254]: Bus n/a: changing state UNSET → OPENING
Zbigniew Jędrzejewski-Szmek d0973d
Dec 18 20:27:37 systemd-update-utmp[254]: sd-bus: starting bus by connecting to /run/systemd/private...
Zbigniew Jędrzejewski-Szmek d0973d
Dec 18 20:27:37 systemd-update-utmp[254]: Bus n/a: changing state OPENING → CLOSED
Zbigniew Jędrzejewski-Szmek d0973d
Dec 18 20:27:37 systemd-update-utmp[254]: Failed to get D-Bus connection: Connection refused
Zbigniew Jędrzejewski-Szmek d0973d
```
Zbigniew Jędrzejewski-Szmek d0973d
Zbigniew Jędrzejewski-Szmek d0973d
(cherry picked from commit 85d040dabd2cc67c89b7ed6157429b8f6f2240f4)
Zbigniew Jędrzejewski-Szmek d0973d
---
Zbigniew Jędrzejewski-Szmek d0973d
 src/update-utmp/update-utmp.c | 15 ++++++++++-----
Zbigniew Jędrzejewski-Szmek d0973d
 1 file changed, 10 insertions(+), 5 deletions(-)
Zbigniew Jędrzejewski-Szmek d0973d
Zbigniew Jędrzejewski-Szmek d0973d
diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c
Zbigniew Jędrzejewski-Szmek d0973d
index e40843cf35..a10e6d478a 100644
Zbigniew Jędrzejewski-Szmek d0973d
--- a/src/update-utmp/update-utmp.c
Zbigniew Jędrzejewski-Szmek d0973d
+++ b/src/update-utmp/update-utmp.c
Zbigniew Jędrzejewski-Szmek d0973d
@@ -53,6 +53,12 @@ static int get_startup_monotonic_time(Context *c, usec_t *ret) {
Zbigniew Jędrzejewski-Szmek d0973d
         assert(c);
Zbigniew Jędrzejewski-Szmek d0973d
         assert(ret);
Zbigniew Jędrzejewski-Szmek d0973d
 
Zbigniew Jędrzejewski-Szmek d0973d
+        if (!c->bus) {
Zbigniew Jędrzejewski-Szmek d0973d
+                r = bus_connect_system_systemd(&c->bus);
Zbigniew Jędrzejewski-Szmek d0973d
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek d0973d
+                        return log_warning_errno(r, "Failed to get D-Bus connection, ignoring: %m");
Zbigniew Jędrzejewski-Szmek d0973d
+        }
Zbigniew Jędrzejewski-Szmek d0973d
+
Zbigniew Jędrzejewski-Szmek d0973d
         r = bus_get_property_trivial(
Zbigniew Jędrzejewski-Szmek d0973d
                         c->bus,
Zbigniew Jędrzejewski-Szmek d0973d
                         bus_systemd_mgr,
Zbigniew Jędrzejewski-Szmek d0973d
@@ -94,10 +100,13 @@ static int get_current_runlevel(Context *c) {
Zbigniew Jędrzejewski-Szmek d0973d
                                 UINT64_C(100) * USEC_PER_MSEC +
Zbigniew Jędrzejewski-Szmek d0973d
                                 random_u64_range(UINT64_C(1900) * USEC_PER_MSEC * n_attempts / MAX_ATTEMPTS);
Zbigniew Jędrzejewski-Szmek d0973d
                         (void) usleep_safe(usec);
Zbigniew Jędrzejewski-Szmek d0973d
+                }
Zbigniew Jędrzejewski-Szmek d0973d
 
Zbigniew Jędrzejewski-Szmek d0973d
+                if (!c->bus) {
Zbigniew Jędrzejewski-Szmek d0973d
                         r = bus_connect_system_systemd(&c->bus);
Zbigniew Jędrzejewski-Szmek d0973d
                         if (r == -ECONNREFUSED && n_attempts < 64) {
Zbigniew Jędrzejewski-Szmek d0973d
-                                log_debug_errno(r, "Failed to reconnect to system bus, retrying after a slight delay: %m");
Zbigniew Jędrzejewski-Szmek d0973d
+                                log_debug_errno(r, "Failed to %s to system bus, retrying after a slight delay: %m",
Zbigniew Jędrzejewski-Szmek d0973d
+                                                n_attempts <= 1 ? "connect" : "reconnect");
Zbigniew Jędrzejewski-Szmek d0973d
                                 continue;
Zbigniew Jędrzejewski-Szmek d0973d
                         }
Zbigniew Jędrzejewski-Szmek d0973d
                         if (r < 0)
Zbigniew Jędrzejewski-Szmek d0973d
@@ -251,7 +260,6 @@ static int run(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek d0973d
                 .audit_fd = -EBADF,
Zbigniew Jędrzejewski-Szmek d0973d
 #endif
Zbigniew Jędrzejewski-Szmek d0973d
         };
Zbigniew Jędrzejewski-Szmek d0973d
-        int r;
Zbigniew Jędrzejewski-Szmek d0973d
 
Zbigniew Jędrzejewski-Szmek d0973d
         log_setup();
Zbigniew Jędrzejewski-Szmek d0973d
 
Zbigniew Jędrzejewski-Szmek d0973d
@@ -264,9 +272,6 @@ static int run(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek d0973d
                 log_full_errno(IN_SET(errno, EAFNOSUPPORT, EPROTONOSUPPORT) ? LOG_DEBUG : LOG_WARNING,
Zbigniew Jędrzejewski-Szmek d0973d
                                errno, "Failed to connect to audit log, ignoring: %m");
Zbigniew Jędrzejewski-Szmek d0973d
 #endif
Zbigniew Jędrzejewski-Szmek d0973d
-        r = bus_connect_system_systemd(&c.bus);
Zbigniew Jędrzejewski-Szmek d0973d
-        if (r < 0)
Zbigniew Jędrzejewski-Szmek d0973d
-                return log_error_errno(r, "Failed to get D-Bus connection: %m");
Zbigniew Jędrzejewski-Szmek d0973d
 
Zbigniew Jędrzejewski-Szmek d0973d
         return dispatch_verb(argc, argv, verbs, &c);
Zbigniew Jędrzejewski-Szmek d0973d
 }
Zbigniew Jędrzejewski-Szmek d0973d
-- 
Zbigniew Jędrzejewski-Szmek d0973d
2.47.1
Zbigniew Jędrzejewski-Szmek d0973d