diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 9fc5464665..dc7c9ef9ef 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -949,6 +949,17 @@ noreturn void freeze(void) { sync(); + /* Let's not freeze right away, but keep reaping zombies. */ + for (;;) { + int r; + siginfo_t si = {}; + + r = waitid(P_ALL, 0, &si, WEXITED); + if (r < 0 && errno != EINTR) + break; + } + + /* waitid() failed with an unexpected error, things are really borked. Freeze now! */ for (;;) pause(); }