Simplify codes on calculating shutdown timeout
@@ -949,27 +949,32 @@ func (daemon *Daemon) shutdownContainer(c *container.Container) error {
return nil
}
-// ShutdownTimeout returns the shutdown timeout based on the max stopTimeout of the containers,
-// and is limited by daemon's ShutdownTimeout.
+// ShutdownTimeout returns the timeout (in seconds) before containers are forcibly
+// killed during shutdown. The default timeout can be configured both on the daemon
+// and per container, and the longest timeout will be used. A grace-period of
+// 5 seconds is added to the configured timeout.
+//
+// A negative (-1) timeout means "indefinitely", which means that containers
+// are not forcibly killed, and the daemon shuts down after all containers exit.
func (daemon *Daemon) ShutdownTimeout() int {
- // By default we use daemon's ShutdownTimeout.
shutdownTimeout := daemon.configStore.ShutdownTimeout
+ if shutdownTimeout < 0 {
+ return -1
+ }
+ if daemon.containers == nil {
+ return shutdownTimeout
+ }
graceTimeout := 5
- if daemon.containers != nil {
for _, c := range daemon.containers.List() {
- if shutdownTimeout >= 0 {
stopTimeout := c.StopTimeout()
if stopTimeout < 0 {
- shutdownTimeout = -1
- } else {
+ return -1
+ }
if stopTimeout+graceTimeout > shutdownTimeout {
shutdownTimeout = stopTimeout + graceTimeout
}
}
- }
- }
- }
return shutdownTimeout
}
