X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Finitctl.c;h=e2189e9ee171e8ccf0f997f823badff2c55d5116;hp=eaa717ad916bdb55115870696123397bb012759e;hb=57020a3abff20f176e9f0cbb982d7977119d6f08;hpb=65457142f12ecc4bb39fad51b73b9d3e6eac4af5 diff --git a/src/initctl.c b/src/initctl.c index eaa717ad9..e2189e9ee 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -34,13 +34,13 @@ #include #include +#include #include "util.h" #include "log.h" #include "list.h" #include "initreq.h" #include "special.h" -#include "sd-daemon.h" #include "dbus-common.h" #include "def.h" @@ -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;