]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: set userForced while holding gcsema
authorLeonard Wang <wangdeyu0907@gmail.com>
Sun, 24 Apr 2022 04:14:13 +0000 (12:14 +0800)
committerGopher Robot <gobot@golang.org>
Tue, 13 Sep 2022 17:41:06 +0000 (17:41 +0000)
Fixes #52515

Change-Id: If10068a97733daf61aba72da5ed3935db8eed8b9
Reviewed-on: https://go-review.googlesource.com/c/go/+/401776
Reviewed-by: hopehook <hopehook@golangcn.org>
Run-TryBot: hopehook <hopehook@golangcn.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Jenny Rakoczy <jenny@golang.org>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Jenny Rakoczy <jenny@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/mgc.go

index 3243a15b4d1e8589f4882094792fb8760337db26..f7e54d3dd3305a4fb2262825dbc2872706c45e41 100644 (file)
@@ -612,9 +612,6 @@ func gcStart(trigger gcTrigger) {
                return
        }
 
-       // For stats, check if this GC was forced by the user.
-       work.userForced = trigger.kind == gcTriggerCycle
-
        // In gcstoptheworld debug mode, upgrade the mode accordingly.
        // We do this after re-checking the transition condition so
        // that multiple goroutines that detect the heap trigger don't
@@ -630,6 +627,10 @@ func gcStart(trigger gcTrigger) {
        semacquire(&gcsema)
        semacquire(&worldsema)
 
+       // For stats, check if this GC was forced by the user.
+       // Update it under gcsema to avoid gctrace getting wrong values.
+       work.userForced = trigger.kind == gcTriggerCycle
+
        if trace.enabled {
                traceGCStart()
        }