From: Lennart Poettering Date: Tue, 1 Nov 2011 17:18:17 +0000 (+0100) Subject: initctl: don't use dbus connection after PID 1 got respawned X-Git-Tag: v38~216 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f632a6634dd4eff041425aa9b3fb48ccfa98c014;p=systemd initctl: don't use dbus connection after PID 1 got respawned After reexec PID 1 our bus connection is invalidated. Hence don't try to reuse it, just terminate so that when we are spawned the next time we just get a new one. Spotted by Marti Raudsepp. --- diff --git a/src/initctl.c b/src/initctl.c index eaa717ad..097c85fd 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -56,6 +56,8 @@ typedef struct Server { unsigned n_fifos; DBusConnection *bus; + + bool quit; } Server; struct Fifo { @@ -174,6 +176,13 @@ static void request_process(Server *s, const struct init_request *req) { case 'U': if (kill(1, SIGTERM) < 0) log_error("kill() failed: %m"); + + /* The bus connection will be + * terminated if PID 1 is reexecuted, + * hence let's just exit here, and + * rely on that we'll be restarted on + * the next request */ + s->quit = true; break; case 'q': @@ -404,7 +413,7 @@ int main(int argc, char *argv[]) { "READY=1\n" "STATUS=Processing requests..."); - for (;;) { + while (!server.quit) { struct epoll_event event; int k;