]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't start GC if preemptoff is set
authorAustin Clements <austin@google.com>
Fri, 15 May 2015 20:03:27 +0000 (16:03 -0400)
committerAustin Clements <austin@google.com>
Mon, 18 May 2015 14:55:18 +0000 (14:55 +0000)
In order to avoid deadlocks, startGC avoids kicking off GC if locks
are held by the calling M. However, it currently fails to check
preemptoff, which is the other way to disable preemption.

Fix this by adding a check for preemptoff.

Change-Id: Ie1083166e5ba4af5c9d6c5a42efdfaaef41ca997
Reviewed-on: https://go-review.googlesource.com/10153
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/mgc.go

index d33fbf11dea7d11f0996e0016e886ec56586d41b..848b46804cbca7d63142d055ee73cd845b7e4171 100644 (file)
@@ -703,7 +703,7 @@ func startGC(mode int) {
        // trying to run gc while holding a lock. The next mallocgc without a lock
        // will do the gc instead.
        mp := acquirem()
-       if gp := getg(); gp == mp.g0 || mp.locks > 1 || !memstats.enablegc || panicking != 0 || gcpercent < 0 {
+       if gp := getg(); gp == mp.g0 || mp.locks > 1 || mp.preemptoff != "" || !memstats.enablegc || panicking != 0 || gcpercent < 0 {
                releasem(mp)
                return
        }