Browse code

More graceful stop for testing daemon

Fixes problem with TestDaemonAllocatesListeningPort

Signed-off-by: Alexander Morozov <lk4d4@docker.com>

Alexander Morozov authored on 2014/12/24 06:15:19
Showing 1 changed files
... ...
@@ -206,20 +206,33 @@ func (d *Daemon) Stop() error {
206 206
 	if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
207 207
 		return fmt.Errorf("could not send signal: %v", err)
208 208
 	}
209
-out:
209
+out1:
210 210
 	for {
211 211
 		select {
212 212
 		case err := <-d.wait:
213 213
 			return err
214
-		case <-time.After(20 * time.Second):
214
+		case <-time.After(15 * time.Second):
215
+			// time for stopping jobs and run onShutdown hooks
215 216
 			d.t.Log("timeout")
216
-			break out
217
+			break out1
218
+		}
219
+	}
220
+
221
+out2:
222
+	for {
223
+		select {
224
+		case err := <-d.wait:
225
+			return err
217 226
 		case <-tick:
218
-			d.t.Logf("Attempt #%d: daemon is still running with pid %d", i+1, d.cmd.Process.Pid)
227
+			i++
228
+			if i > 4 {
229
+				d.t.Log("tried to interrupt daemon for %d times, now try to kill it", i)
230
+				break out2
231
+			}
232
+			d.t.Logf("Attempt #%d: daemon is still running with pid %d", i, d.cmd.Process.Pid)
219 233
 			if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
220 234
 				return fmt.Errorf("could not send signal: %v", err)
221 235
 			}
222
-			i++
223 236
 		}
224 237
 	}
225 238