From 6aecdb4f8e73031f0deeac88a88ffc3fad9d5377 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Wed, 13 Aug 2014 21:32:20 +0000 Subject: [PATCH] Workaround to avoid 5 second delay on graceful daemon restart Signed-off-by: Solomon Hykes --- engine/job.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/engine/job.go b/engine/job.go index c05db5616e..1c2521206c 100644 --- a/engine/job.go +++ b/engine/job.go @@ -49,10 +49,17 @@ func (job *Job) Run() error { if job.Eng.IsShutdown() { return fmt.Errorf("engine is shutdown") } - job.Eng.l.Lock() - job.Eng.tasks.Add(1) - job.Eng.l.Unlock() - defer job.Eng.tasks.Done() + // FIXME: this is a temporary workaround to avoid Engine.Shutdown + // waiting 5 seconds for server/api.ServeApi to complete (which it never will) + // everytime the daemon is cleanly restarted. + // The permanent fix is to implement Job.Stop and Job.OnStop so that + // ServeApi can cooperate and terminate cleanly. + if job.Name != "serveapi" { + job.Eng.l.Lock() + job.Eng.tasks.Add(1) + job.Eng.l.Unlock() + defer job.Eng.tasks.Done() + } // FIXME: make this thread-safe // FIXME: implement wait if !job.end.IsZero() {