daemon: stop health checks before deleting task

Prevent new health check probes from racing the task deletion. This may
have been a root cause of containers taking so long to stop on Windows.

Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
Cory Snider 2022-08-25 16:34:13 -04:00
parent d0731af939
commit 8b748bd326
1 changed files with 5 additions and 3 deletions

View File

@ -28,6 +28,11 @@ func (daemon *Daemon) setStateCounter(c *container.Container) {
func (daemon *Daemon) handleContainerExit(c *container.Container, e *libcontainerdtypes.EventInfo) error { func (daemon *Daemon) handleContainerExit(c *container.Container, e *libcontainerdtypes.EventInfo) error {
var exitStatus container.ExitStatus var exitStatus container.ExitStatus
c.Lock() c.Lock()
// Health checks will be automatically restarted if/when the
// container is started again.
daemon.stopHealthchecks(c)
tsk, ok := c.Task() tsk, ok := c.Task()
if ok { if ok {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
@ -72,9 +77,6 @@ func (daemon *Daemon) handleContainerExit(c *container.Container, e *libcontaine
restart = false restart = false
} }
// cancel healthcheck here, they will be automatically
// restarted if/when the container is started again
daemon.stopHealthchecks(c)
attributes := map[string]string{ attributes := map[string]string{
"exitCode": strconv.Itoa(exitStatus.ExitCode), "exitCode": strconv.Itoa(exitStatus.ExitCode),
} }