瀏覽代碼

Engine.Shutdown only waits 5 seconds for active jobs to complete

Signed-off-by: Solomon Hykes <solomon@docker.com>
Solomon Hykes 11 年之前
父節點
當前提交
eb79dc14fe
共有 1 個文件被更改,包括 13 次插入4 次删除
  1. 13 4
      engine/engine.go

+ 13 - 4
engine/engine.go

@@ -164,11 +164,20 @@ func (eng *Engine) Shutdown() {
 	// This requires all concurrent calls to check for shutdown, otherwise
 	// it might cause a race.
 
-	// Wait for all jobs to complete
-	eng.tasks.Wait()
+	// Wait for all jobs to complete.
+	// Timeout after 5 seconds.
+	tasksDone := make(chan struct{})
+	go func() {
+		eng.tasks.Wait()
+		close(tasksDone)
+	}()
+	select {
+	case <-time.After(time.Second * 5):
+	case <-tasksDone:
+	}
 
 	// Call shutdown handlers, if any.
-	// Timeout after 15 seconds.
+	// Timeout after 10 seconds.
 	var wg sync.WaitGroup
 	for _, h := range eng.onShutdown {
 		wg.Add(1)
@@ -183,7 +192,7 @@ func (eng *Engine) Shutdown() {
 		close(done)
 	}()
 	select {
-	case <-time.After(time.Second * 15):
+	case <-time.After(time.Second * 10):
 	case <-done:
 	}
 	return