From: Dan Scales Date: Sat, 1 May 2021 20:57:00 +0000 (-0700) Subject: cmd/compile: add edge from lock rank edge from forceGC to traceStackTab X-Git-Tag: go1.17beta1~289 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d75fbac54d34484041a5ecb0b65f298b821cd963;p=gostls13.git cmd/compile: add edge from lock rank edge from forceGC to traceStackTab This edge can happen when forcegchelper() calls goparkunlock(&forcegc.lock, ...) while holding the forcegc lock. goparkunlock() eventually calls park_m(). In park_m(), traceGoPark() (which leads to (*traceStackTable).put() and acquires the traceStackTab lock) can be called before the forcegc lock is released. Fixes #45774 Change-Id: If0fceab596712eb9ec0b9b47326778bc0ff80913 Reviewed-on: https://go-review.googlesource.com/c/go/+/316029 Run-TryBot: Dan Scales TryBot-Result: Go Bot Reviewed-by: Michael Knyszek Trust: Carlos Amedee --- diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index b600c2132b..dde9f7c21a 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -217,7 +217,7 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankAssistQueue, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankHchan, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings}, lockRankRoot: {}, lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankAssistQueue, lockRankSweep, lockRankSched, lockRankHchan, lockRankTraceBuf, lockRankTraceStrings, lockRankRoot}, - lockRankTraceStackTab: {lockRankScavenge, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankSched, lockRankAllg, lockRankTimers, lockRankHchan, lockRankFin, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankRoot, lockRankTrace}, + lockRankTraceStackTab: {lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankSched, lockRankAllg, lockRankTimers, lockRankHchan, lockRankFin, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankRoot, lockRankTrace}, lockRankNetpollInit: {lockRankTimers}, lockRankRwmutexW: {},