Browse code

Workaround to avoid 5 second delay on graceful daemon restart

Signed-off-by: Solomon Hykes <solomon@docker.com>

Solomon Hykes authored on 2014/08/14 06:32:20
Showing 1 changed files
... ...
@@ -49,10 +49,17 @@ func (job *Job) Run() error {
49 49
 	if job.Eng.IsShutdown() {
50 50
 		return fmt.Errorf("engine is shutdown")
51 51
 	}
52
-	job.Eng.l.Lock()
53
-	job.Eng.tasks.Add(1)
54
-	job.Eng.l.Unlock()
55
-	defer job.Eng.tasks.Done()
52
+	// FIXME: this is a temporary workaround to avoid Engine.Shutdown
53
+	// waiting 5 seconds for server/api.ServeApi to complete (which it never will)
54
+	// everytime the daemon is cleanly restarted.
55
+	// The permanent fix is to implement Job.Stop and Job.OnStop so that
56
+	// ServeApi can cooperate and terminate cleanly.
57
+	if job.Name != "serveapi" {
58
+		job.Eng.l.Lock()
59
+		job.Eng.tasks.Add(1)
60
+		job.Eng.l.Unlock()
61
+		defer job.Eng.tasks.Done()
62
+	}
56 63
 	// FIXME: make this thread-safe
57 64
 	// FIXME: implement wait
58 65
 	if !job.end.IsZero() {