Skip to content

Commit 6d00c3a

Browse files
committed
runc-shim: only defer init process exits
In order to make sure that we don't publish task exit events for init processes before we do for execs in that container, we added logic to `processExits` in 892dc54 to skip these and let the pending exec's `handleStarted` closure process them. However, the conditional logic in `processExits` added was faulty - we should only defer processing of exit events related to init processes, not other execs. Due to this missing condition, 892dc54 introduced a bug where, if there are many concurrent execs for the same container/init pid, exec exits are skipped and then never published, resulting in hanging clients. This commit adds the missing logic to `processExits`. Signed-off-by: Laura Brehm <[email protected]>
1 parent 124456e commit 6d00c3a

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

cmd/containerd-shim-runc-v2/task/service.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,8 @@ func (s *service) processExits() {
678678
// process.
679679
var cps, skipped []containerProcess
680680
for _, cp := range s.running[e.Pid] {
681-
if s.pendingExecs[cp.Container] != 0 {
681+
_, init := cp.Process.(*process.Init)
682+
if init && s.pendingExecs[cp.Container] != 0 {
682683
// This exit relates to a container for which we have pending execs. In
683684
// order to ensure order between execs and the init process for a given
684685
// container, skip processing this exit here and let the `handleStarted`

0 commit comments

Comments
 (0)