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` in892dc54bd2
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,892dc54bd2
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 <laurabrehm@hey.com>
This commit is contained in:
parent
124456ef83
commit
6d00c3ada8
@ -678,7 +678,8 @@ func (s *service) processExits() {
|
|||||||
// process.
|
// process.
|
||||||
var cps, skipped []containerProcess
|
var cps, skipped []containerProcess
|
||||||
for _, cp := range s.running[e.Pid] {
|
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
|
// 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
|
// order to ensure order between execs and the init process for a given
|
||||||
// container, skip processing this exit here and let the `handleStarted`
|
// container, skip processing this exit here and let the `handleStarted`
|
||||||
|
Loading…
Reference in New Issue
Block a user