From 4b2774f5ea4f6f0beb75259f65e60585b6dbfd56 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 8 Jul 2015 14:18:33 -0700 Subject: [PATCH] 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 --- src/runtime/proc.go | 2 +- src/runtime/proc1.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 -- 2.50.0