aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-11-22 15:26:35 -0500
committerAustin Clements <austin@google.com>2017-11-22 21:44:35 +0000
commit09739d285085d0a8440bd521d04376c8acc31ecd (patch)
tree9392edffee1a17b239b57556f4eceeff9dde51ae /src/runtime
parentc6c0f47e92771c9b4fced87b94c04f66e5d6eba5 (diff)
downloadgo-09739d285085d0a8440bd521d04376c8acc31ecd.tar.xz
runtime: call throw on systemstack in exitsyscall
If exitsyscall tries to grow the stack it will panic, but throw calls print, which can grow the stack. Move the two bare throws in exitsyscall to the system stack. Updates #21431. Change-Id: I5b29da5d34ade908af648a12075ed327a864476c Reviewed-on: https://go-review.googlesource.com/79517 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/proc.go8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index 0492a4139d..8cb6e57a97 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -2939,7 +2939,9 @@ func exitsyscall(dummy int32) {
oldp := _g_.m.p.ptr()
if exitsyscallfast() {
if _g_.m.mcache == nil {
- throw("lost mcache")
+ systemstack(func() {
+ throw("lost mcache")
+ })
}
if trace.enabled {
if oldp != _g_.m.p.ptr() || _g_.m.syscalltick != _g_.m.p.ptr().syscalltick {
@@ -2986,7 +2988,9 @@ func exitsyscall(dummy int32) {
mcall(exitsyscall0)
if _g_.m.mcache == nil {
- throw("lost mcache")
+ systemstack(func() {
+ throw("lost mcache")
+ })
}
// Scheduler returned, so we're allowed to run now.