mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-20 20:22:46 +00:00
fix(worker): fix log file leakage of two-stage-sync provider. closing #36
This commit is contained in:
parent
24bdfe5b33
commit
c8af09f129
@ -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,10 +72,19 @@ func (c *cmdJob) Start() error {
|
||||
}
|
||||
|
||||
func (c *cmdJob) Wait() error {
|
||||
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) {
|
||||
c.cmd.Stdout = logFile
|
||||
|
@ -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 != "" {
|
||||
|
Loading…
x
Reference in New Issue
Block a user