From 79e6167028d85ee462a9953c4b26a0a712fa0549 Mon Sep 17 00:00:00 2001 From: Yuxiang Zhang Date: Wed, 30 May 2018 01:46:16 +0800 Subject: [PATCH] fix race condition on logFile of baseProvider --- worker/base_provider.go | 28 +++++----------------------- worker/runner.go | 3 +++ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/worker/base_provider.go b/worker/base_provider.go index 0befa61..0505239 100644 --- a/worker/base_provider.go +++ b/worker/base_provider.go @@ -20,8 +20,6 @@ type baseProvider struct { cmd *cmdJob isRunning atomic.Value - logFile *os.File - cgroup *cgroupHook zfs *zfsHook docker *dockerHook @@ -116,15 +114,12 @@ func (p *baseProvider) prepareLogFile() error { p.cmd.SetLogFile(nil) return nil } - if p.logFile == nil { - logFile, err := os.OpenFile(p.LogFile(), os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - logger.Errorf("Error opening logfile %s: %s", p.LogFile(), err.Error()) - return err - } - p.logFile = logFile + logFile, err := os.OpenFile(p.LogFile(), os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + logger.Errorf("Error opening logfile %s: %s", p.LogFile(), err.Error()) + return err } - p.cmd.SetLogFile(p.logFile) + p.cmd.SetLogFile(logFile) return nil } @@ -143,13 +138,7 @@ func (p *baseProvider) IsRunning() bool { func (p *baseProvider) Wait() error { defer func() { - p.Lock() p.isRunning.Store(false) - if p.logFile != nil { - p.logFile.Close() - p.logFile = nil - } - p.Unlock() }() return p.cmd.Wait() } @@ -160,13 +149,6 @@ func (p *baseProvider) Terminate() error { return nil } - p.Lock() - if p.logFile != nil { - p.logFile.Close() - p.logFile = nil - } - p.Unlock() - err := p.cmd.Terminate() p.isRunning.Store(false) diff --git a/worker/runner.go b/worker/runner.go index 05a6f6b..e47417e 100644 --- a/worker/runner.go +++ b/worker/runner.go @@ -118,6 +118,9 @@ func (c *cmdJob) Wait() error { return c.retErr default: err := c.cmd.Wait() + if c.cmd.Stdout != nil { + c.cmd.Stdout.(*os.File).Close() + } c.retErr = err close(c.finished) return err