Skip to content

Commit 00ce30b

Browse files
committed
Merge pull request moby#5571 from vieux/fix_race_docker_daemon
Fix race docker daemon
2 parents 1adc2fa + 937f8f2 commit 00ce30b

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

api/server/server.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,7 @@ func changeGroup(addr string, nameOrGid string) error {
11891189
// ListenAndServe sets up the required http.Server and gets it listening for
11901190
// each addr passed in and does protocol specific checking.
11911191
func ListenAndServe(proto, addr string, job *engine.Job) error {
1192+
var l net.Listener
11921193
r, err := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
11931194
if err != nil {
11941195
return err
@@ -1204,7 +1205,11 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
12041205
}
12051206
}
12061207

1207-
l, err := listenbuffer.NewListenBuffer(proto, addr, activationLock)
1208+
if job.GetenvBool("BufferRequests") {
1209+
l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock)
1210+
} else {
1211+
l, err = net.Listen(proto, addr)
1212+
}
12081213
if err != nil {
12091214
return err
12101215
}
@@ -1276,10 +1281,6 @@ func ServeApi(job *engine.Job) engine.Status {
12761281
)
12771282
activationLock = make(chan struct{})
12781283

1279-
if err := job.Eng.Register("acceptconnections", AcceptConnections); err != nil {
1280-
return job.Error(err)
1281-
}
1282-
12831284
for _, protoAddr := range protoAddrs {
12841285
protoAddrParts := strings.SplitN(protoAddr, "://", 2)
12851286
if len(protoAddrParts) != 2 {
@@ -1306,7 +1307,9 @@ func AcceptConnections(job *engine.Job) engine.Status {
13061307
go systemd.SdNotify("READY=1")
13071308

13081309
// close the lock so the listeners start accepting connections
1309-
close(activationLock)
1310+
if activationLock != nil {
1311+
close(activationLock)
1312+
}
13101313

13111314
return engine.StatusOK
13121315
}

builtins/builtins.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ func Register(eng *engine.Engine) error {
2828

2929
// remote: a RESTful api for cross-docker communication
3030
func remote(eng *engine.Engine) error {
31-
return eng.Register("serveapi", apiserver.ServeApi)
31+
if err := eng.Register("serveapi", apiserver.ServeApi); err != nil {
32+
return err
33+
}
34+
return eng.Register("acceptconnections", apiserver.AcceptConnections)
3235
}
3336

3437
// daemon: a default execution and storage backend for Docker on Linux,

docker/docker.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ func main() {
185185
job.Setenv("TlsCa", *flCa)
186186
job.Setenv("TlsCert", *flCert)
187187
job.Setenv("TlsKey", *flKey)
188+
job.SetenvBool("BufferRequests", true)
188189
if err := job.Run(); err != nil {
189190
log.Fatal(err)
190191
}

0 commit comments

Comments
 (0)