From: Austin Clements Date: Wed, 8 Jul 2015 21:18:33 +0000 (-0700) Subject: runtime: make sysmon-triggered GC concurrent X-Git-Tag: go1.5beta2~111 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4b2774f5ea4f6f0beb75259f65e60585b6dbfd56;p=gostls13.git runtime: make sysmon-triggered GC concurrent sysmon triggers a GC if there has been no GC for two minutes. Currently, this is a STW GC. There is no reason for this to be STW, so make it concurrent. Fixes #10261. Change-Id: I92f3ac37272d5c2a31480ff1fa897ebad08775a9 Reviewed-on: https://go-review.googlesource.com/11955 Reviewed-by: Rob Pike Reviewed-by: Russ Cox --- diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 805b96e627..1a4c6c109f 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -154,7 +154,7 @@ func forcegchelper() { if debug.gctrace > 0 { println("GC forced") } - startGC(gcForceMode) + startGC(gcBackgroundMode) } } diff --git a/src/runtime/proc1.go b/src/runtime/proc1.go index 6a163c62a0..a048ded94c 100644 --- a/src/runtime/proc1.go +++ b/src/runtime/proc1.go @@ -3004,7 +3004,7 @@ func sysmon() { } // check if we need to force a GC lastgc := int64(atomicload64(&memstats.last_gc)) - if lastgc != 0 && unixnow-lastgc > forcegcperiod && atomicload(&forcegc.idle) != 0 { + if lastgc != 0 && unixnow-lastgc > forcegcperiod && atomicload(&forcegc.idle) != 0 && atomicloaduint(&bggc.working) == 0 { lock(&forcegc.lock) forcegc.idle = 0 forcegc.g.schedlink = 0