From 09739d285085d0a8440bd521d04376c8acc31ecd Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 22 Nov 2017 15:26:35 -0500 Subject: [PATCH] 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 Reviewed-by: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/runtime/proc.go | 8 ++++++-- 1 file 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. -- 2.51.0