diff options
| author | Austin Clements <austin@google.com> | 2017-11-22 15:26:35 -0500 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2017-11-22 21:44:35 +0000 |
| commit | 09739d285085d0a8440bd521d04376c8acc31ecd (patch) | |
| tree | 9392edffee1a17b239b57556f4eceeff9dde51ae /src/runtime | |
| parent | c6c0f47e92771c9b4fced87b94c04f66e5d6eba5 (diff) | |
| download | go-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.go | 8 |
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. |
