diff options
author | Will Chandler <wchandler@gitlab.com> | 2022-05-20 08:21:41 +0300 |
---|---|---|
committer | Will Chandler <wchandler@gitlab.com> | 2022-05-20 08:21:41 +0300 |
commit | 5c57bbfef4f37bcca64e3db2e147265450b86300 (patch) | |
tree | dbfb4ec30a32e4a1fe591b444376ff8e2e037a8e | |
parent | 63e15a79c51641952580b54bcbe7935fa38b0128 (diff) | |
parent | faac47edca44039bcfcc4becb3be5b21b8dc5f95 (diff) |
Merge branch 'pks-supervise-fix-logrus-goroutine-leakage' into 'master'
supervisor: Fix leaking logrus Goroutine on spawn failure
Closes #3927
See merge request gitlab-org/gitaly!4567
-rw-r--r-- | internal/supervisor/supervisor.go | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/internal/supervisor/supervisor.go b/internal/supervisor/supervisor.go index f695b071e..602010483 100644 --- a/internal/supervisor/supervisor.go +++ b/internal/supervisor/supervisor.go @@ -93,12 +93,22 @@ func New(config Config, name string, env []string, args []string, dir string, me func (p *Process) start(logger *log.Entry) (*exec.Cmd, error) { startCounter.WithLabelValues(p.Name).Inc() + logWriter := logger.WriterLevel(log.InfoLevel) + cmd := exec.Command(p.args[0], p.args[1:]...) cmd.Env = p.env cmd.Dir = p.dir - cmd.Stdout = logger.WriterLevel(log.InfoLevel) - cmd.Stderr = logger.WriterLevel(log.InfoLevel) - return cmd, cmd.Start() + cmd.Stdout = logWriter + cmd.Stderr = logWriter + + // When starting the command fails we need to make sure to close the log pipes, or + // otherwise the Goroutines spawned by logrus may leak. + if err := cmd.Start(); err != nil { + logWriter.Close() + return nil, err + } + + return cmd, nil } func (p *Process) notifyEvent(eventType EventType, pid int) { |