Return listenbuffer behavior
Now we're start to serve early, but all Accept calls are intercepted by listenbuffer or systemd socket. Signed-off-by: Alexander Morozov <lk4d4@docker.com> Upstream-commit: 281a48d092fa84500c63b984ad45c59a06f301c4 Component: engine
This commit is contained in:
@ -235,6 +235,21 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
// The serve API routine never exits unless an error occurs
|
||||
// We need to start it as a goroutine and wait on it so
|
||||
// daemon doesn't exit
|
||||
// All servers must be protected with some mechanism (systemd socket, listenbuffer)
|
||||
// which prevents real handling of request until routes will be set.
|
||||
serveAPIWait := make(chan error)
|
||||
go func() {
|
||||
if err := api.ServeAPI(); err != nil {
|
||||
logrus.Errorf("ServeAPI error: %v", err)
|
||||
serveAPIWait <- err
|
||||
return
|
||||
}
|
||||
serveAPIWait <- nil
|
||||
}()
|
||||
|
||||
if err := migrateKey(); err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
@ -262,19 +277,6 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||
|
||||
api.InitRouters(d)
|
||||
|
||||
// The serve API routine never exits unless an error occurs
|
||||
// We need to start it as a goroutine and wait on it so
|
||||
// daemon doesn't exit
|
||||
serveAPIWait := make(chan error)
|
||||
go func() {
|
||||
if err := api.ServeAPI(); err != nil {
|
||||
logrus.Errorf("ServeAPI error: %v", err)
|
||||
serveAPIWait <- err
|
||||
return
|
||||
}
|
||||
serveAPIWait <- nil
|
||||
}()
|
||||
|
||||
signal.Trap(func() {
|
||||
api.Close()
|
||||
<-serveAPIWait
|
||||
|
||||
Reference in New Issue
Block a user