From a69cda9a6541b7d0a1f25159b2eee9b058f4ac70 Mon Sep 17 00:00:00 2001 From: Dan Scales Date: Tue, 27 Oct 2020 15:52:42 -0700 Subject: [PATCH] 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 --- src/runtime/lockrank.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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}, -- 2.48.1