More graceful stop for testing daemon

Fixes problem with TestDaemonAllocatesListeningPort

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
This commit is contained in:
Alexander Morozov 2014-12-23 13:15:19 -08:00
parent 8412e3c226
commit 8dc86c0e36
1 changed files with 18 additions and 5 deletions

View File

@ -206,20 +206,33 @@ func (d *Daemon) Stop() error {
if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
return fmt.Errorf("could not send signal: %v", err)
}
out:
out1:
for {
select {
case err := <-d.wait:
return err
case <-time.After(20 * time.Second):
case <-time.After(15 * time.Second):
// time for stopping jobs and run onShutdown hooks
d.t.Log("timeout")
break out
break out1
}
}
out2:
for {
select {
case err := <-d.wait:
return err
case <-tick:
d.t.Logf("Attempt #%d: daemon is still running with pid %d", i+1, d.cmd.Process.Pid)
i++
if i > 4 {
d.t.Log("tried to interrupt daemon for %d times, now try to kill it", i)
break out2
}
d.t.Logf("Attempt #%d: daemon is still running with pid %d", i, d.cmd.Process.Pid)
if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
return fmt.Errorf("could not send signal: %v", err)
}
i++
}
}