@@ -281,7 +281,7 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
281281 return errors .Errorf ("[%s] could not start daemon container: %v" , d .id , err )
282282 }
283283
284- wait := make (chan error )
284+ wait := make (chan error , 1 )
285285
286286 go func () {
287287 ret := d .cmd .Wait ()
@@ -309,26 +309,27 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
309309 req .URL .Host = clientConfig .addr
310310 req .URL .Scheme = clientConfig .scheme
311311
312- ticker := time .NewTicker (500 * time .Millisecond )
313- defer ticker .Stop ()
314- tick := ticker .C
315-
316- timeout := time .NewTimer (60 * time .Second ) // timeout for the whole loop
317- defer timeout .Stop ()
312+ ctx , cancel := context .WithTimeout (context .Background (), 60 * time .Second )
313+ defer cancel ()
318314
319315 // make sure daemon is ready to receive requests
320316 for {
321317 d .log .Logf ("[%s] waiting for daemon to start" , d .id )
322318
323319 select {
324- case <- timeout .C :
325- return errors .Errorf ("[%s] Daemon exited and never started" , d .id )
326- case <- tick :
327- ctx , cancel := context .WithTimeout (context .TODO (), 2 * time .Second )
328- resp , err := client .Do (req .WithContext (ctx ))
329- cancel ()
320+ case <- ctx .Done ():
321+ return errors .Errorf ("[%s] Daemon exited and never started: %s" , d .id , ctx .Err ())
322+ case err := <- d .Wait :
323+ return errors .Errorf ("[%s] Daemon exited during startup: %v" , d .id , err )
324+ default :
325+ rctx , rcancel := context .WithTimeout (context .TODO (), 2 * time .Second )
326+ defer rcancel ()
327+
328+ resp , err := client .Do (req .WithContext (rctx ))
330329 if err != nil {
331330 d .log .Logf ("[%s] error pinging daemon on start: %v" , d .id , err )
331+
332+ time .Sleep (500 * time .Millisecond )
332333 continue
333334 }
334335
@@ -342,8 +343,6 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
342343 return errors .Errorf ("[%s] error querying daemon for root directory: %v" , d .id , err )
343344 }
344345 return nil
345- case err := <- d .Wait :
346- return errors .Errorf ("[%s] Daemon exited during startup: %v" , d .id , err )
347346 }
348347 }
349348}
0 commit comments