From: Austin Clements Date: Wed, 22 Nov 2017 20:26:35 +0000 (-0500) Subject: runtime: call throw on systemstack in exitsyscall X-Git-Tag: go1.10beta1~159 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=09739d285085d0a8440bd521d04376c8acc31ecd;p=gostls13.git 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 --- 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.