X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsocket.c;h=4a9c939936ee843f0164988935f985cf1b1f7fe4;hb=7c610628cd907b8d04dbfe28dd23a0fa958c7dcd;hp=2d113aef306d8ef31c2f5ce3689cd14c1e391706;hpb=b708e7cea941538bfd5e20ce0a723c19b7da7d1d;p=elogind.git diff --git a/src/socket.c b/src/socket.c index 2d113aef3..4a9c93993 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1030,6 +1030,24 @@ static void socket_enter_running(Socket *s, int cfd) { assert(s); dbus_error_init(&error); + /* We don't take connections anymore if we are supposed to + * shut down anyway */ + if (s->meta.job && s->meta.job->type == JOB_STOP) { + if (cfd >= 0) + close_nointr_nofail(cfd); + else { + /* Flush all sockets by closing and reopening them */ + socket_close_fds(s); + + if ((r = socket_watch_fds(s)) < 0) { + log_warning("%s failed to watch sockets: %s", s->meta.id, strerror(-r)); + socket_enter_stop_pre(s, false); + } + } + + return; + } + if (cfd < 0) { if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s->service), JOB_REPLACE, true, &error, NULL)) < 0) goto fail;