From: Dan Scales Date: Tue, 27 Oct 2020 22:52:42 +0000 (-0700) Subject: runtime: add edge lockRankSysmon -> lockRankRwmutexR X-Git-Tag: go1.16beta1~452 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a69cda9a6541b7d0a1f25159b2eee9b058f4ac70;p=gostls13.git runtime: add edge lockRankSysmon -> lockRankRwmutexR Sysmon can actually get the RW lock execLock while holding the sysmon lock (if no M is available), so there is an edge from lockRankSysmon to lockRankRwmutexR. The stack trace is sysmon() [gets sched.sysmonlock] -> startm() -> newm() -> newm1() -> execLock.runlock() [gets execLock.rLock] Change-Id: I9658659ba3899afb5219114d66b989abd50540db Reviewed-on: https://go-review.googlesource.com/c/go/+/265721 Trust: Dan Scales Reviewed-by: Michael Knyszek --- diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index 3f9b087856..0a52e8ed3d 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -222,7 +222,7 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankNetpollInit: {lockRankTimers}, lockRankRwmutexW: {}, - lockRankRwmutexR: {lockRankRwmutexW}, + lockRankRwmutexR: {lockRankSysmon, lockRankRwmutexW}, lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankAssistQueue, lockRankCpuprof, lockRankSweep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankHchan}, lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankCpuprof, lockRankSweep, lockRankSched, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankHchan, lockRankFin, lockRankTraceBuf, lockRankTraceStrings, lockRankRoot, lockRankNotifyList, lockRankProf, lockRankGcBitsArenas, lockRankTrace, lockRankTraceStackTab, lockRankNetpollInit, lockRankSpanSetSpine},