From: Michael Anthony Knyszek Date: Thu, 30 Apr 2020 19:13:41 +0000 (+0000) Subject: runtime: add scavenge -> traceBuf to lock partial order X-Git-Tag: go1.15beta1~272 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0f8fecaba762c352db481d4919edf404f5590d22;p=gostls13.git runtime: add scavenge -> traceBuf to lock partial order Under the scavenge lock it's possible to ready a goroutine (or now injectglist, which has mostly the same effect) which could cause an unpark trace event to be emitted. If there's no active trace buffer for the P, then we might acquire the lock. The total order between the two is correct, but there's no partial order edge between them. Add in the edge. Change-Id: I3fc5d86a3b6bdd0b5648181fb76b5ebc90c3d69f Reviewed-on: https://go-review.googlesource.com/c/go/+/231197 Run-TryBot: Michael Knyszek TryBot-Result: Gobot Gobot Reviewed-by: Dan Scales --- diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index c2f061169a..05fff95797 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -201,7 +201,7 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankHchan: {lockRankScavenge, lockRankSweep, lockRankHchan}, lockRankFin: {lockRankSched, lockRankAllg, lockRankTimers, lockRankHchan}, lockRankNotifyList: {}, - lockRankTraceBuf: {}, + lockRankTraceBuf: {lockRankScavenge}, lockRankTraceStrings: {lockRankTraceBuf}, lockRankMspanSpecial: {lockRankScavenge, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankHchan, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings}, lockRankProf: {lockRankScavenge, lockRankAssistQueue, lockRankCpuprof, lockRankSweep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankHchan},