diff --git a/runtime/v1/shim/reaper.go b/runtime/v1/shim/reaper.go index 2937f1a9e..10d5c304a 100644 --- a/runtime/v1/shim/reaper.go +++ b/runtime/v1/shim/reaper.go @@ -26,12 +26,13 @@ import ( "github.com/containerd/containerd/sys" runc "github.com/containerd/go-runc" "github.com/pkg/errors" + "github.com/sirupsen/logrus" ) // ErrNoSuchProcess is returned when the process no longer exists var ErrNoSuchProcess = errors.New("no such process") -const bufferSize = 32 +const bufferSize = 2048 // Reap should be called when the process receives an SIGCHLD. Reap will reap // all exited processes and close their wait channels @@ -41,13 +42,20 @@ func Reap() error { Default.Lock() for c := range Default.subscribers { for _, e := range exits { - c <- runc.Exit{ + select { + case c <- runc.Exit{ Timestamp: now, Pid: e.Pid, Status: e.Status, + }: + default: + logrus.WithFields(logrus.Fields{ + "subscriber": c, + "pid": e.Pid, + "status": e.Status, + }).Warn("failed to send exit to subscriber") } } - } Default.Unlock() return err diff --git a/runtime/v2/shim/reaper_unix.go b/runtime/v2/shim/reaper_unix.go index 2937f1a9e..10d5c304a 100644 --- a/runtime/v2/shim/reaper_unix.go +++ b/runtime/v2/shim/reaper_unix.go @@ -26,12 +26,13 @@ import ( "github.com/containerd/containerd/sys" runc "github.com/containerd/go-runc" "github.com/pkg/errors" + "github.com/sirupsen/logrus" ) // ErrNoSuchProcess is returned when the process no longer exists var ErrNoSuchProcess = errors.New("no such process") -const bufferSize = 32 +const bufferSize = 2048 // Reap should be called when the process receives an SIGCHLD. Reap will reap // all exited processes and close their wait channels @@ -41,13 +42,20 @@ func Reap() error { Default.Lock() for c := range Default.subscribers { for _, e := range exits { - c <- runc.Exit{ + select { + case c <- runc.Exit{ Timestamp: now, Pid: e.Pid, Status: e.Status, + }: + default: + logrus.WithFields(logrus.Fields{ + "subscriber": c, + "pid": e.Pid, + "status": e.Status, + }).Warn("failed to send exit to subscriber") } } - } Default.Unlock() return err