• 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
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...