浏览代码

More graceful stop for testing daemon

Fixes problem with TestDaemonAllocatesListeningPort

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Alexander Morozov 10 年之前
父节点
当前提交
8dc86c0e36
共有 1 个文件被更改,包括 18 次插入5 次删除
  1. 18 5
      integration-cli/docker_utils.go

+ 18 - 5
integration-cli/docker_utils.go

@@ -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++
 		}
 	}