From: Ross Lagerwall Date: Sun, 9 Jun 2013 16:28:44 +0000 (+0100) Subject: service: don't report alien child as alive when it's not X-Git-Tag: v205~154 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=62220cf70e381f6e08390523e4696f7bc431f927;ds=sidebyside service: don't report alien child as alive when it's not When a sigchld is received from an alien child, main_pid is set to 0 then service_enter_running calls main_pid_good to check if the child is running. This incorrectly returned true because kill(main_pid, 0) would return >= 0. This fixes an error where a service would die and the cgroup would become empty but the service would still report as active (running). --- diff --git a/src/core/service.c b/src/core/service.c index 20990d2a1..dadd98123 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -1865,7 +1865,7 @@ static int main_pid_good(Service *s) { /* If it's an alien child let's check if it is still * alive ... */ - if (s->main_pid_alien) + if (s->main_pid_alien && s->main_pid > 0) return kill(s->main_pid, 0) >= 0 || errno != ESRCH; /* .. otherwise assume we'll get a SIGCHLD for it,