| ... | ... |
@@ -1189,6 +1189,7 @@ func changeGroup(addr string, nameOrGid string) error {
|
| 1189 | 1189 |
// ListenAndServe sets up the required http.Server and gets it listening for |
| 1190 | 1190 |
// each addr passed in and does protocol specific checking. |
| 1191 | 1191 |
func ListenAndServe(proto, addr string, job *engine.Job) error {
|
| 1192 |
+ var l net.Listener |
|
| 1192 | 1193 |
r, err := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
|
| 1193 | 1194 |
if err != nil {
|
| 1194 | 1195 |
return err |
| ... | ... |
@@ -1204,7 +1205,11 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
|
| 1204 | 1204 |
} |
| 1205 | 1205 |
} |
| 1206 | 1206 |
|
| 1207 |
- l, err := listenbuffer.NewListenBuffer(proto, addr, activationLock) |
|
| 1207 |
+ if job.GetenvBool("BufferRequests") {
|
|
| 1208 |
+ l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock) |
|
| 1209 |
+ } else {
|
|
| 1210 |
+ l, err = net.Listen(proto, addr) |
|
| 1211 |
+ } |
|
| 1208 | 1212 |
if err != nil {
|
| 1209 | 1213 |
return err |
| 1210 | 1214 |
} |
| ... | ... |
@@ -1276,10 +1281,6 @@ func ServeApi(job *engine.Job) engine.Status {
|
| 1276 | 1276 |
) |
| 1277 | 1277 |
activationLock = make(chan struct{})
|
| 1278 | 1278 |
|
| 1279 |
- if err := job.Eng.Register("acceptconnections", AcceptConnections); err != nil {
|
|
| 1280 |
- return job.Error(err) |
|
| 1281 |
- } |
|
| 1282 |
- |
|
| 1283 | 1279 |
for _, protoAddr := range protoAddrs {
|
| 1284 | 1280 |
protoAddrParts := strings.SplitN(protoAddr, "://", 2) |
| 1285 | 1281 |
if len(protoAddrParts) != 2 {
|
| ... | ... |
@@ -1306,7 +1307,9 @@ func AcceptConnections(job *engine.Job) engine.Status {
|
| 1306 | 1306 |
go systemd.SdNotify("READY=1")
|
| 1307 | 1307 |
|
| 1308 | 1308 |
// close the lock so the listeners start accepting connections |
| 1309 |
- close(activationLock) |
|
| 1309 |
+ if activationLock != nil {
|
|
| 1310 |
+ close(activationLock) |
|
| 1311 |
+ } |
|
| 1310 | 1312 |
|
| 1311 | 1313 |
return engine.StatusOK |
| 1312 | 1314 |
} |
| ... | ... |
@@ -28,7 +28,10 @@ func Register(eng *engine.Engine) error {
|
| 28 | 28 |
|
| 29 | 29 |
// remote: a RESTful api for cross-docker communication |
| 30 | 30 |
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)
|
|
| 32 | 35 |
} |
| 33 | 36 |
|
| 34 | 37 |
// daemon: a default execution and storage backend for Docker on Linux, |