Cleanup: refactor shutdown and signal handling facility
This disentangles the following functions, which were previously all mixed together: * 1) Waiting for jobs to terminate when shutting down * 2) Handling signals in the Docker daemon * 3) Per-subsystem cleanup handlers * 4) pidfile management Responsibilities are dispatched as follows: * Signal traps are set in `main`, and trigger `engine.Shutdown` * `engine.Shutdown` coordinates cleanup by waiting for jobs to complete, and calling shutdown handlers * To perform cleanup at shutdown, each subsystem registers handlers with `engine.OnShutdown` * `daemon` is one subsystem, so it registers cleanup via `engine.OnShutdown`. * `daemon` owns the pidfile, which is used to lock access to `/var/lib/docker`. Part of its cleanup is to remove the pidfile. Signed-off-by: Solomon Hykes <solomon@docker.com> Upstream-commit: c9f3fd3fc7a4beb97de40ef8da7330b23397d9d3 Component: engine
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
"github.com/docker/docker/dockerversion"
|
||||
"github.com/docker/docker/engine"
|
||||
flag "github.com/docker/docker/pkg/mflag"
|
||||
"github.com/docker/docker/pkg/signal"
|
||||
"github.com/docker/docker/sysinit"
|
||||
)
|
||||
|
||||
@ -39,6 +40,7 @@ func mainDaemon() {
|
||||
}
|
||||
|
||||
eng := engine.New()
|
||||
signal.Trap(eng.Shutdown)
|
||||
// Load builtins
|
||||
if err := builtins.Register(eng); err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
Reference in New Issue
Block a user