Skip to content

Commit 5d066a8

Browse files
committed
fix runc's poststart behaviour doesn't match the runtime-spec
Signed-off-by: ningmingxiao <[email protected]>
1 parent 3778ae6 commit 5d066a8

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

libcontainer/container_linux.go

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,15 @@ func (c *Container) exec() error {
236236
for {
237237
select {
238238
case result := <-blockingFifoOpenCh:
239-
return handleFifoResult(result)
239+
err := handleFifoResult(result)
240+
if err != nil {
241+
return err
242+
}
243+
err = c.postStart()
244+
if err != nil {
245+
logrus.Errorf("poststart: %v", err)
246+
}
247+
return nil
240248

241249
case <-time.After(time.Millisecond * 100):
242250
stat, err := system.Stat(pid)
@@ -246,12 +254,29 @@ func (c *Container) exec() error {
246254
if err := handleFifoResult(fifoOpen(path, false)); err != nil {
247255
return errors.New("container process is already dead")
248256
}
257+
err := c.postStart()
258+
if err != nil {
259+
logrus.Errorf("poststart: %v", err)
260+
}
249261
return nil
250262
}
251263
}
252264
}
253265
}
254266

267+
func (c *Container) postStart() error {
268+
s, err := c.currentOCIState()
269+
if err != nil {
270+
return err
271+
}
272+
if c.config.Hooks != nil {
273+
if err := c.config.Hooks.Run(configs.Poststart, s); err != nil {
274+
return fmt.Errorf("run poststart hook: %w", err)
275+
}
276+
}
277+
return nil
278+
}
279+
255280
func readFromExecFifo(execFifo io.Reader) error {
256281
data, err := io.ReadAll(execFifo)
257282
if err != nil {
@@ -353,19 +378,6 @@ func (c *Container) start(process *Process) (retErr error) {
353378

354379
if process.Init {
355380
c.fifo.Close()
356-
if c.config.Hooks != nil {
357-
s, err := c.currentOCIState()
358-
if err != nil {
359-
return err
360-
}
361-
362-
if err := c.config.Hooks.Run(configs.Poststart, s); err != nil {
363-
if err := ignoreTerminateErrors(parent.terminate()); err != nil {
364-
logrus.Warn(fmt.Errorf("error running poststart hook: %w", err))
365-
}
366-
return err
367-
}
368-
}
369381
}
370382
return nil
371383
}

0 commit comments

Comments
 (0)