]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: add GODEBUG=asyncpreemptoff=1
authorAustin Clements <austin@google.com>
Sun, 13 Oct 2019 15:27:47 +0000 (11:27 -0400)
committerAustin Clements <austin@google.com>
Sat, 2 Nov 2019 21:51:07 +0000 (21:51 +0000)
This doesn't do anything yet, but it will provide a way to disable
non-cooperative preemption.

For #10958, #24543.

Change-Id: Ifdef303f103eabd0922ced8d9bebbd5f0aa2cda4
Reviewed-on: https://go-review.googlesource.com/c/go/+/201757
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/extern.go
src/runtime/runtime1.go

index 4ddf3549e6934de6034fb1fe6263b9c8e7d22ce8..dc3772d9361c1f4cb032509ad3e02c7cd051e0bd 100644 (file)
@@ -127,6 +127,13 @@ It is a comma-separated list of name=val pairs setting these named variables:
        IDs will refer to the ID of the goroutine at the time of creation; it's possible for this
        ID to be reused for another goroutine. Setting N to 0 will report no ancestry information.
 
+       asyncpreemptoff: asyncpreemptoff=1 disables signal-based
+       asynchronous goroutine preemption. This makes some loops
+       non-preemptible for long periods, which may delay GC and
+       goroutine scheduling. This is useful for debugging GC issues
+       because it also disables the conservative stack scanning used
+       for asynchronously preempted goroutines.
+
 The net, net/http, and crypto/tls packages also refer to debugging variables in GODEBUG.
 See the documentation for those packages for details.
 
index ad29818e0a5d3680866b296299ceb78c97713d5a..180dd7c7e49005dcbf2b5d77a7142a0467b6a550 100644 (file)
@@ -315,6 +315,7 @@ var debug struct {
        scheddetail        int32
        schedtrace         int32
        tracebackancestors int32
+       asyncpreemptoff    int32
 }
 
 var dbgvars = []dbgVar{
@@ -334,6 +335,7 @@ var dbgvars = []dbgVar{
        {"scheddetail", &debug.scheddetail},
        {"schedtrace", &debug.schedtrace},
        {"tracebackancestors", &debug.tracebackancestors},
+       {"asyncpreemptoff", &debug.asyncpreemptoff},
 }
 
 func parsedebugvars() {