cmd/dockerd: Rewrite shutdownDaemon to use context timeout
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
66a0289081
commit
2006d9f7d1
1 changed files with 13 additions and 16 deletions
|
@ -360,26 +360,23 @@ func (cli *DaemonCli) stop() {
|
|||
// d.Shutdown() is waiting too long to kill container or worst it's
|
||||
// blocked there
|
||||
func shutdownDaemon(ctx context.Context, d *daemon.Daemon) {
|
||||
shutdownTimeout := d.ShutdownTimeout()
|
||||
ch := make(chan struct{})
|
||||
go func() {
|
||||
d.Shutdown(ctx)
|
||||
close(ch)
|
||||
}()
|
||||
if shutdownTimeout < 0 {
|
||||
<-ch
|
||||
logrus.Debug("Clean shutdown succeeded")
|
||||
return
|
||||
var cancel context.CancelFunc
|
||||
if timeout := d.ShutdownTimeout(); timeout >= 0 {
|
||||
ctx, cancel = context.WithTimeout(ctx, time.Duration(timeout)*time.Second)
|
||||
} else {
|
||||
ctx, cancel = context.WithCancel(ctx)
|
||||
}
|
||||
|
||||
timeout := time.NewTimer(time.Duration(shutdownTimeout) * time.Second)
|
||||
defer timeout.Stop()
|
||||
go func() {
|
||||
defer cancel()
|
||||
d.Shutdown(ctx)
|
||||
}()
|
||||
|
||||
select {
|
||||
case <-ch:
|
||||
logrus.Debug("Clean shutdown succeeded")
|
||||
case <-timeout.C:
|
||||
<-ctx.Done()
|
||||
if errors.Is(ctx.Err(), context.DeadlineExceeded) {
|
||||
logrus.Error("Force shutdown daemon")
|
||||
} else {
|
||||
logrus.Debug("Clean shutdown succeeded")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue