packer: Lock in RemoteCommand.ExitChan

This commit is contained in:
Mitchell Hashimoto 2013-06-01 17:45:57 -07:00
parent 24237da32c
commit 8034e91ca3
1 changed files with 6 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package packer
import (
"io"
"sync"
"time"
)
@ -34,6 +35,8 @@ type RemoteCommand struct {
Stderr io.Reader
Exited bool
ExitStatus int
exitChanLock sync.Mutex
}
// StdoutStream returns a channel that will be sent all the output
@ -47,9 +50,11 @@ func (r *RemoteCommand) StdoutChan() (<-chan string) {
// the process exits. This can be used in cases such a select statement
// waiting on the process to end.
func (r *RemoteCommand) ExitChan() (<-chan int) {
// TODO(mitchellh): lock
// TODO(mitchellh): Something more efficient than multiple Wait() calls
r.exitChanLock.Lock()
defer r.exitChanLock.Unlock()
// Make a single buffered channel so that the send doesn't block.
exitChan := make(chan int, 1)