@@ -79,7 +79,7 @@ func (l *logLimiter) preExec() error {
logLink := filepath.Join(logDir, "latest")
- if _, err = os.Stat(logLink); err == nil {
+ if _, err = os.Lstat(logLink); err == nil {
os.Remove(logLink)
}
os.Symlink(logFileName, logLink)
@@ -5,6 +5,7 @@ import (
"os"
"os/exec"
"strings"
+ "sync"
"syscall"
"time"
@@ -17,12 +18,14 @@ import (
var errProcessNotStarted = errors.New("Process Not Started")
type cmdJob struct {
+ sync.Mutex
cmd *exec.Cmd
workingDir string
env map[string]string
logFile *os.File
finished chan empty
provider mirrorProvider
+ retErr error
func newCmdJob(provider mirrorProvider, cmdAndArgs []string, workingDir string, env map[string]string) *cmdJob {
@@ -69,9 +72,18 @@ func (c *cmdJob) Start() error {
func (c *cmdJob) Wait() error {
- err := c.cmd.Wait()
- close(c.finished)
- return err
+ c.Lock()
+ defer c.Unlock()
+
+ select {
+ case <-c.finished:
+ return c.retErr
+ default:
+ err := c.cmd.Wait()
+ c.retErr = err
+ close(c.finished)
+ return err
+ }
func (c *cmdJob) SetLogFile(logFile *os.File) {
@@ -108,6 +108,7 @@ func (p *twoStageRsyncProvider) Options(stage int) ([]string, error) {
func (p *twoStageRsyncProvider) Run() error {
+ defer p.Wait()
env := map[string]string{}
if p.username != "" {