mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 17:51:22 +03:00
manager: don't skip sigchld handler for main and control pid for services (#3738)
During stop when service has one "regular" pid one main pid and one control pid and the sighld for the regular one is processed first the unit_tidy_watch_pids will skip the main and control pid and does not remove them from u->pids(). But then we skip the sigchld event because we already did one in the iteration and there are two pids in u->pids. v2: Use general unit_main_pid() and unit_control_pid() instead of reaching directly to service structure.
This commit is contained in:
parent
7fbbf283c8
commit
ccc2c98e1b
@ -1729,7 +1729,10 @@ static void invoke_sigchld_event(Manager *m, Unit *u, const siginfo_t *si) {
|
||||
unit_unwatch_pid(u, si->si_pid);
|
||||
|
||||
if (UNIT_VTABLE(u)->sigchld_event) {
|
||||
if (set_size(u->pids) <= 1 || iteration != u->sigchldgen) {
|
||||
if (set_size(u->pids) <= 1 ||
|
||||
iteration != u->sigchldgen ||
|
||||
unit_main_pid(u) == si->si_pid ||
|
||||
unit_control_pid(u) == si->si_pid) {
|
||||
UNIT_VTABLE(u)->sigchld_event(u, si->si_pid, si->si_code, si->si_status);
|
||||
u->sigchldgen = iteration;
|
||||
} else
|
||||
|
Loading…
Reference in New Issue
Block a user