diff options
author | mrsdizzie <info@mrsdizzie.com> | 2020-04-28 11:45:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-28 11:45:32 -0400 |
commit | 922a239079aefb78a05f1234f8883d8096f46c62 (patch) | |
tree | f70061c31926c63227fed5152ce5b38b66d46251 /modules | |
parent | 1f0b797ddc139c3241c9b9694f0666a28ab41d80 (diff) | |
download | gitea-922a239079aefb78a05f1234f8883d8096f46c62.tar.gz gitea-922a239079aefb78a05f1234f8883d8096f46c62.zip |
Disable new signal-based asynchronous goroutine preemption from GO 1.14 in git env (#11237)
As seen in trouble shooting #11032 the new feature of Go 1.14 is causing several second delays in startup in certain situations. Debugging shows it spending several seconds handling SIGURG commands during init:
```
6922:04:51.984234 trace init() ./modules/queue/unique_queue_wrapped.go
remote: ) = 69 <0.000012>
remote: [pid 15984] 22:04:51 write(1, "\ttime taken: 236.761\302\265s\n\n", 25 time taken: 236.761µs
remote:
remote: ) = 25 <0.000011>
remote: [pid 15984] 22:04:51 --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=15984, si_uid=0} ---
remote: [pid 15984] 22:04:52 --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=15984, si_uid=0} ---
remote: [pid 15984] 22:04:52 --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=15984, si_uid=0} ---
```
This causes up to 20 seconds added to a push in some cases as it happens for each call of the gitea hook command. This is likely the cause of #10661 as well and would start to effect users once we release 1.12 which would be the first release compiled with Go 1.14. I suspect this is just a slight issue with the upstream implementatation as there have been a few very similar bugs fixed and reported:
https://github.com/golang/go/issues/37741
https://github.com/golang/go/issues/37942
We should revisit this in the future and see if a newer version of Go has solved it, but for now disable this option in the environment that gitea hook runs in to avoid it.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/git/command.go | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/modules/git/command.go b/modules/git/command.go index c1f3860731..53a04f64be 100644 --- a/modules/git/command.go +++ b/modules/git/command.go @@ -119,6 +119,8 @@ func (c *Command) RunInDirTimeoutEnvFullPipelineFunc(env []string, timeout time. cmd.Env = env cmd.Env = append(cmd.Env, fmt.Sprintf("LC_ALL=%s", DefaultLocale)) } + + cmd.Env = append(cmd.Env, "GODEBUG=asyncpreemptoff=1") cmd.Dir = dir cmd.Stdout = stdout cmd.Stderr = stderr |