hostnamed: don't allow hostnamed to exit on idle if varlink connections are still...
authorLennart Poettering <lennart@poettering.net>
Wed, 8 May 2024 08:38:11 +0000 (10:38 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 18 Jun 2024 18:41:01 +0000 (20:41 +0200)
And while we are at it, ongoing PK authorizations are also a reason to
block exit on idle.

(cherry picked from commit ac908152b3b43a49f793d225c075423422cd3e33)

src/hostname/hostnamed.c

index 82d08803fa5b6b5123c0c425c9385a5709367d93..fe1216fc1c30a32145d51c01c4ec409d21a6cde5 100644 (file)
@@ -1682,6 +1682,13 @@ static int connect_varlink(Context *c) {
         return 0;
 }
 
+static bool context_check_idle(void *userdata) {
+        Context *c = ASSERT_PTR(userdata);
+
+        return varlink_server_current_connections(c->varlink_server) == 0 &&
+                hashmap_isempty(c->polkit_registry);
+}
+
 static int run(int argc, char *argv[]) {
         _cleanup_(context_destroy) Context context = {
                 .hostname_source = _HOSTNAME_INVALID, /* appropriate value will be set later */
@@ -1731,8 +1738,8 @@ static int run(int argc, char *argv[]) {
                         context.bus,
                         "org.freedesktop.hostname1",
                         DEFAULT_EXIT_USEC,
-                        /* check_idle= */ NULL,
-                        /* userdata= */ NULL);
+                        context_check_idle,
+                        &context);
         if (r < 0)
                 return log_error_errno(r, "Failed to run event loop: %m");