]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add edge lockRankSysmon -> lockRankRwmutexR
authorDan Scales <danscales@google.com>
Tue, 27 Oct 2020 22:52:42 +0000 (15:52 -0700)
committerDan Scales <danscales@google.com>
Wed, 28 Oct 2020 15:52:02 +0000 (15:52 +0000)
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 <danscales@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/runtime/lockrank.go

index 3f9b0878564f143768171e593232d2a8ab7098df..0a52e8ed3dd49b007812c77e88384e5feac20729 100644 (file)
@@ -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},