summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-06-30 21:07:23 +0100
committerGitHub <noreply@github.com>2021-06-30 22:07:23 +0200
commit302e8b6d02dc9ccac00284b3cdf9a69c001882c0 (patch)
treefd8a57a78924df719b8c6771d59c6577b163b659 /modules
parent365c4e9316bbcc8bdf9cf68ef237bf18ae8db315 (diff)
downloadgitea-302e8b6d02dc9ccac00284b3cdf9a69c001882c0.tar.gz
gitea-302e8b6d02dc9ccac00284b3cdf9a69c001882c0.zip
Prevent zombie processes (#16314)
Unfortunately go doesn't always ensure that execd processes are completely waited for. On linux this means that zombie processes can occur. This PR ensures that these are waited for by using signal notifier in serv and passing a context elsewhere. Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'modules')
-rw-r--r--modules/markup/external/external.go10
-rw-r--r--modules/ssh/ssh.go2
2 files changed, 10 insertions, 2 deletions
diff --git a/modules/markup/external/external.go b/modules/markup/external/external.go
index c849f505e7..e35a1b99c0 100644
--- a/modules/markup/external/external.go
+++ b/modules/markup/external/external.go
@@ -5,6 +5,7 @@
package external
import (
+ "context"
"fmt"
"io"
"io/ioutil"
@@ -15,6 +16,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
+ "code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
)
@@ -96,7 +98,13 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
args = append(args, f.Name())
}
- cmd := exec.Command(commands[0], args...)
+ processCtx, cancel := context.WithCancel(ctx.Ctx)
+ defer cancel()
+
+ pid := process.GetManager().Add(fmt.Sprintf("Render [%s] for %s", commands[0], ctx.URLPrefix), cancel)
+ defer process.GetManager().Remove(pid)
+
+ cmd := exec.CommandContext(processCtx, commands[0], args...)
cmd.Env = append(
os.Environ(),
"GITEA_PREFIX_SRC="+ctx.URLPrefix,
diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go
index bcaae5a180..c0897377c5 100644
--- a/modules/ssh/ssh.go
+++ b/modules/ssh/ssh.go
@@ -66,7 +66,7 @@ func sessionHandler(session ssh.Session) {
args := []string{"serv", "key-" + keyID, "--config=" + setting.CustomConf}
log.Trace("SSH: Arguments: %v", args)
- cmd := exec.Command(setting.AppPath, args...)
+ cmd := exec.CommandContext(session.Context(), setting.AppPath, args...)
cmd.Env = append(
os.Environ(),
"SSH_ORIGINAL_COMMAND="+command,