]> Cypherpunks repositories - gostls13.git/commit
runtime: flush on every write barrier while debugging
authorAustin Clements <austin@google.com>
Tue, 18 Dec 2018 01:57:34 +0000 (20:57 -0500)
committerAustin Clements <austin@google.com>
Tue, 18 Dec 2018 15:17:50 +0000 (15:17 +0000)
commit2d00007bdb996dc859ffb16b601e0f51bb72662c
tree85a56f5af68a2252a009d14155930389cef60c94
parent9a258f308689d2f1cb13f286baf745aad5fa991b
runtime: flush on every write barrier while debugging

Currently, we flush the write barrier buffer on every write barrier
once throwOnGCWork is set, but not during the mark completion
algorithm itself. As seen in recent failures like

  https://build.golang.org/log/317369853b803b4ee762b27653f367e1aa445ac1

by the time we actually catch a late gcWork put, the write barrier
buffer is full-size again.

As a result, we're probably not catching the actual problematic write
barrier, which is probably somewhere in the buffer.

Fix this by using the gcWork pause generation to also keep the write
barrier buffer small between the mark completion flushes it and when
mark completion is done.

For #27993.

Change-Id: I77618169441d42a7d562fb2a998cfaa89891edb2
Reviewed-on: https://go-review.googlesource.com/c/154638
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/runtime/mgc.go
src/runtime/mwbbuf.go