diff mbox

libgo patch committed: Don't lose track of m value in GC

Message ID mcrr40hz8ti.fsf@iant-glaptop.roam.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor Aug. 15, 2014, 10:28 p.m. UTC
The runtime_gc function in libgo invokes the garbage collector proper on
the g0 thread (a thread with a large stack that is not involved in
scheduling).  This is done via runtime_mcall.  Upon return from
runtime_mcall, the caller may be running on a different thread.
Unfortunately, the runtime_gc function called runtime_m to get the Go
thread info, and did not refresh that value after calling
runtime_mcall.  The result mostly worked, but could fail in very busy
program doing lots of work that started going as soon as the GC
stopped.  This patch fixes the problem.  Bootstrapped and ran Go
testsuite on x86_64-unknown-linux-gnu.  Committed to mainline and 4.9
branch.

Ian
diff mbox

Patch

diff -r 52dcc874d3b7 libgo/runtime/mgc0.c
--- a/libgo/runtime/mgc0.c	Wed Aug 13 14:52:52 2014 -0700
+++ b/libgo/runtime/mgc0.c	Fri Aug 15 15:07:02 2014 -0700
@@ -2204,6 +2204,7 @@ 
 		g->status = Gwaiting;
 		g->waitreason = "garbage collection";
 		runtime_mcall(mgc);
+		m = runtime_m();
 	}
 
 	// all done