summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/basic/process-util.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index c4a69f261..3746f224a 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -960,6 +960,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();
}