aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/runtime2.go
diff options
context:
space:
mode:
authorRick Hudson <rlh@golang.org>2015-01-26 13:51:39 -0500
committerRick Hudson <rlh@golang.org>2015-01-28 20:05:55 +0000
commit13aff7831d32c80b98ede611f1ffb0476f16ec51 (patch)
tree1d1e834da6c48bf3f2e2e94469104313537355ba /src/runtime/runtime2.go
parent8332f807853d9aa47c7aa04bf3501eae88180170 (diff)
downloadgo-13aff7831d32c80b98ede611f1ffb0476f16ec51.tar.xz
runtime: avoid redundant scans
During a concurrent GC stacks are scanned in an initial scan phase informing the GC of all pointers on the stack. The GC only needs to rescan the stack if it potentially changes which can only happen if the goroutine runs. This CL tracks whether the Goroutine has run since it was last scanned and thus may have changed its stack. If necessary the stack is rescanned. Change-Id: I5fb1c4338d42e3f61ab56c9beb63b7b2da25f4f1 Reviewed-on: https://go-review.googlesource.com/3275 Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/runtime/runtime2.go')
-rw-r--r--src/runtime/runtime2.go1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index c71a3c3143..6935fcd826 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -203,6 +203,7 @@ type g struct {
paniconfault bool // panic (instead of crash) on unexpected fault address
preemptscan bool // preempted g does scan for gc
gcworkdone bool // debug: cleared at begining of gc work phase cycle, set by gcphasework, tested at end of cycle
+ gcscanvalid bool // false at start of gc cycle, true if G has not run since last scan
throwsplit bool // must not split stack
raceignore int8 // ignore race detection events
m *m // for debuggers, but offset not hard-coded