1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-25 18:50:18 +03:00

util: prevent daemon-reload from reaping service processes.

The reaping of generator processes run as part of a daemon-reload should not
call waitid(PID_ALL). The waitid() call in execute_directory() is intended only
to reap the executed processes, but if a service process exits at about the
same time as a daemon-reload, then that service process is reaped as well,
preventing it from being reaped in the proper place in
manager_dispatch_sigchld().

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=43625
This commit is contained in:
Chris Paulson-Ellis 2012-02-02 17:32:05 +00:00 committed by Lennart Poettering
parent ce09557917
commit ec3f9b53f8

View File

@ -4623,11 +4623,12 @@ void execute_directory(const char *directory, DIR *d, char *argv[]) {
}
while (!hashmap_isempty(pids)) {
pid_t pid = PTR_TO_UINT(hashmap_first_key(pids));
siginfo_t si;
char *path;
zero(si);
if (waitid(P_ALL, 0, &si, WEXITED) < 0) {
if (waitid(P_PID, pid, &si, WEXITED) < 0) {
if (errno == EINTR)
continue;