Skip to content

Commit

Permalink
runc-shim: only defer init process exits
Browse files Browse the repository at this point in the history
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]>
(cherry picked from commit 6d00c3a)
Signed-off-by: Laura Brehm <[email protected]>
  • Loading branch information
laurazard committed Apr 5, 2024
1 parent 0dcf21c commit 21df467
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion runtime/v2/runc/task/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,8 @@ func (s *service) processExits() {
// process.
var cps, skipped []containerProcess
for _, cp := range s.running[e.Pid] {
if s.pendingExecs[cp.Container] != 0 {
_, init := cp.Process.(*process.Init)
if init && s.pendingExecs[cp.Container] != 0 {
// This exit relates to a container for which we have pending execs. In
// order to ensure order between execs and the init process for a given
// container, skip processing this exit here and let the `handleStarted`
Expand Down

0 comments on commit 21df467

Please sign in to comment.