From 647dc33e1ad967ade50d803816366a2a944691de Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Thu, 12 Mar 2020 11:39:10 +0100 Subject: rootlessport: detect rootless-child exit otherwise the rootless parent process might wait indefinitely when the rootless-child process exits early. Signed-off-by: Giuseppe Scrivano --- pkg/rootlessport/rootlessport_linux.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/rootlessport/rootlessport_linux.go b/pkg/rootlessport/rootlessport_linux.go index 2b51f4e09..febfc2268 100644 --- a/pkg/rootlessport/rootlessport_linux.go +++ b/pkg/rootlessport/rootlessport_linux.go @@ -160,6 +160,13 @@ func parent() error { return err } + childErrCh := make(chan error) + go func() { + err := cmd.Wait() + childErrCh <- err + close(childErrCh) + }() + defer func() { if err := syscall.Kill(cmd.Process.Pid, syscall.SIGTERM); err != nil { logrus.WithError(err).Warn("kill child process") @@ -174,6 +181,10 @@ outer: case <-initComplete: logrus.Infof("initComplete is closed; parent and child established the communication channel") break outer + case err := <-childErrCh: + if err != nil { + return err + } case err := <-errCh: if err != nil { return err -- cgit v1.2.3-54-g00ecf