]> Cypherpunks repositories - gostls13.git/commit
runtime: fix sleep/wakeup race for GC assists
authorAustin Clements <austin@google.com>
Fri, 15 Jan 2016 18:28:41 +0000 (13:28 -0500)
committerAustin Clements <austin@google.com>
Sat, 16 Jan 2016 02:40:00 +0000 (02:40 +0000)
commitb05f18e3f7c3bb01b2faa7a52054883b0cc3a98a
treeb511f37eecf5eafabc4c21e016b2b635aed8f6a1
parentaea4de80f9137915fa70b114d541833094b88a23
runtime: fix sleep/wakeup race for GC assists

GC assists check gcBlackenEnabled under the assist queue lock to avoid
going to sleep after gcWakeAllAssists has already woken all assists.
However, currently we clear gcBlackenEnabled shortly *after* waking
all assists, which opens a window where this exact race can happen.

Fix this by clearing gcBlackenEnabled before waking blocked assists.
However, it's unlikely this actually matters because the world is
stopped between waking assists and clearing gcBlackenEnabled and there
aren't any obvious allocations during this window, so I don't think an
assist could actually slip in to this race window.

Updates #13645.

Change-Id: I7571f059530481dc781d8fd96a1a40aadebecb0d
Reviewed-on: https://go-review.googlesource.com/18682
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/mgc.go
src/runtime/mgcmark.go