aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/signal_unix.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2019-10-30 23:14:34 -0400
committerCherry Zhang <cherryyz@google.com>2019-11-05 18:58:29 +0000
commitfb05264fe1626c9d0b6d00d51e6c4d8d213d6dc7 (patch)
tree687730953e056a28a397b884d7b00b830cf4ea62 /src/runtime/signal_unix.go
parentc3cef0bfe5f503ee016fc61e58f5ee1b78dbd962 (diff)
downloadgo-fb05264fe1626c9d0b6d00d51e6c4d8d213d6dc7.tar.gz
go-fb05264fe1626c9d0b6d00d51e6c4d8d213d6dc7.zip
runtime: setg after sigFetchG
In the normal case, sigFetchG just returns the G register. But in the case that sigFetchG fetches the G from somewhere else, the G register still holding an invalid value. Setg here to make sure they match. This is particularly useful because setGsignalStack, called by adjustSignalStack from sigtrampgo before setg to gsignal, accesses the G register. Should fix #35249. Change-Id: I64c85143cb05cdb2ecca7f9936dbd8bfec186c2d Reviewed-on: https://go-review.googlesource.com/c/go/+/204441 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/runtime/signal_unix.go')
-rw-r--r--src/runtime/signal_unix.go1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
index 5e4361e7a1..6563186392 100644
--- a/src/runtime/signal_unix.go
+++ b/src/runtime/signal_unix.go
@@ -394,6 +394,7 @@ func sigtrampgo(sig uint32, info *siginfo, ctx unsafe.Pointer) {
}
c := &sigctxt{info, ctx}
g := sigFetchG(c)
+ setg(g)
if g == nil {
if sig == _SIGPROF {
sigprofNonGoPC(c.sigpc())