• Austin Clements's avatar
    runtime: dispose gcWork caches before updating controller state · c4931a84
    Austin Clements authored
    Currently, we only flush the per-P gcWork caches in gcMark, at the
    beginning of mark termination. This is necessary to ensure that no
    work is held up in these caches.
    
    However, this flush happens after we update the GC controller state,
    which depends on statistics about marked heap size and scan work that
    are only updated by this flush. Hence, the controller is missing the
    bulk of heap marking and scan work. This bug was introduced in commit
    1b4025f4, which introduced the per-P gcWork caches.
    
    Fix this by flushing these caches before we update the GC controller
    state. We continue to flush them at the beginning of mark termination
    as well to be robust in case any write barriers happened between the
    previous flush and entering mark termination, but this should be a
    no-op.
    
    Change-Id: I8f0f91024df967ebf0c616d1c4f0c339c304ebaa
    Reviewed-on: https://go-review.googlesource.com/9646Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    c4931a84
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...