fix race condition on logFile of baseProvider

This commit is contained in:
Yuxiang Zhang 2018-05-30 01:46:16 +08:00
parent 95bb4bbd5e
commit 79e6167028
2 changed files with 8 additions and 23 deletions

View File

@ -20,8 +20,6 @@ type baseProvider struct {
cmd *cmdJob cmd *cmdJob
isRunning atomic.Value isRunning atomic.Value
logFile *os.File
cgroup *cgroupHook cgroup *cgroupHook
zfs *zfsHook zfs *zfsHook
docker *dockerHook docker *dockerHook
@ -116,15 +114,12 @@ func (p *baseProvider) prepareLogFile() error {
p.cmd.SetLogFile(nil) p.cmd.SetLogFile(nil)
return nil return nil
} }
if p.logFile == nil {
logFile, err := os.OpenFile(p.LogFile(), os.O_WRONLY|os.O_CREATE, 0644) logFile, err := os.OpenFile(p.LogFile(), os.O_WRONLY|os.O_CREATE, 0644)
if err != nil { if err != nil {
logger.Errorf("Error opening logfile %s: %s", p.LogFile(), err.Error()) logger.Errorf("Error opening logfile %s: %s", p.LogFile(), err.Error())
return err return err
} }
p.logFile = logFile p.cmd.SetLogFile(logFile)
}
p.cmd.SetLogFile(p.logFile)
return nil return nil
} }
@ -143,13 +138,7 @@ func (p *baseProvider) IsRunning() bool {
func (p *baseProvider) Wait() error { func (p *baseProvider) Wait() error {
defer func() { defer func() {
p.Lock()
p.isRunning.Store(false) p.isRunning.Store(false)
if p.logFile != nil {
p.logFile.Close()
p.logFile = nil
}
p.Unlock()
}() }()
return p.cmd.Wait() return p.cmd.Wait()
} }
@ -160,13 +149,6 @@ func (p *baseProvider) Terminate() error {
return nil return nil
} }
p.Lock()
if p.logFile != nil {
p.logFile.Close()
p.logFile = nil
}
p.Unlock()
err := p.cmd.Terminate() err := p.cmd.Terminate()
p.isRunning.Store(false) p.isRunning.Store(false)

View File

@ -118,6 +118,9 @@ func (c *cmdJob) Wait() error {
return c.retErr return c.retErr
default: default:
err := c.cmd.Wait() err := c.cmd.Wait()
if c.cmd.Stdout != nil {
c.cmd.Stdout.(*os.File).Close()
}
c.retErr = err c.retErr = err
close(c.finished) close(c.finished)
return err return err