From ab9a10fbe3497312a80c260cddf6daf8f0f3659d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Wed, 11 Jul 2018 09:40:04 +1100 Subject: [PATCH] fix: was reaping too fast? --- cmd/dkl-system-init/dumb-init-bridge.go | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cmd/dkl-system-init/dumb-init-bridge.go b/cmd/dkl-system-init/dumb-init-bridge.go index 76a3a62..1a7651e 100644 --- a/cmd/dkl-system-init/dumb-init-bridge.go +++ b/cmd/dkl-system-init/dumb-init-bridge.go @@ -3,6 +3,7 @@ package main import ( "os" "os/signal" + "syscall" "golang.org/x/sys/unix" "novit.nc/direktil/pkg/log" @@ -14,26 +15,25 @@ func handleChildren() { initLog.Taintf(log.Error, "reaper: failed to set myself a child sub-reaper: %v", err) } - sigchld := make(chan os.Signal, 10) - signal.Notify(sigchld, unix.SIGCHLD) + sigchld := make(chan os.Signal, 2048) + signal.Notify(sigchld, syscall.SIGCHLD) for range sigchld { - // reap children - var ( - ws unix.WaitStatus - rus unix.Rusage - ) - for { - pid, err := unix.Wait4(-1, &ws, unix.WNOHANG, &rus) - if err != nil { - if err == unix.ECHILD { - break - } - initLog.Taintf(log.Warning, "reaper: wait4 failed: %v", err) - } - if pid <= 0 { + reapChildren() + } +} + +func reapChildren() { + for { + pid, err := syscall.Wait4(-1, nil, syscall.WNOHANG, nil) + if err != nil { + if err == unix.ECHILD { break } + initLog.Taintf(log.Warning, "reaper: wait4 failed: %v", err) + } + if pid <= 0 { + break } } }