lock.go: fix race condition
Fix a race condition between startChild() and killChild() that could lead to an orphaned managed process. Fixes #1155
This commit is contained in:
parent
813e223906
commit
9e0e9e389d
|
@ -47,7 +47,7 @@ Usage: consul lock [options] prefix child...
|
|||
disrupted the child process will be sent a SIGTERM signal and given
|
||||
time to gracefully exit. After the grace period expires the process
|
||||
will be hard terminated.
|
||||
For Consul agents on Windows, the child process is always hard
|
||||
For Consul agents on Windows, the child process is always hard
|
||||
terminated with a SIGKILL, since Windows has no POSIX compatible
|
||||
notion for SIGTERM.
|
||||
|
||||
|
@ -268,13 +268,14 @@ func (c *LockCommand) startChild(script string, doneCh chan struct{}) error {
|
|||
cmd.Stderr = os.Stderr
|
||||
|
||||
// Start the child process
|
||||
c.childLock.Lock()
|
||||
if err := cmd.Start(); err != nil {
|
||||
c.Ui.Error(fmt.Sprintf("Error starting handler: %s", err))
|
||||
c.childLock.Unlock()
|
||||
return err
|
||||
}
|
||||
|
||||
// Setup the child info
|
||||
c.childLock.Lock()
|
||||
c.child = cmd.Process
|
||||
c.childLock.Unlock()
|
||||
|
||||
|
|
Loading…
Reference in New Issue