Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Chandler <wchandler@gitlab.com>2022-05-20 08:21:41 +0300
committerWill Chandler <wchandler@gitlab.com>2022-05-20 08:21:41 +0300
commit5c57bbfef4f37bcca64e3db2e147265450b86300 (patch)
treedbfb4ec30a32e4a1fe591b444376ff8e2e037a8e
parent63e15a79c51641952580b54bcbe7935fa38b0128 (diff)
parentfaac47edca44039bcfcc4becb3be5b21b8dc5f95 (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.go16
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) {