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() {