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:
parent
ce09557917
commit
ec3f9b53f8
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user