@@ -69,6 +69,7 @@ const (
69
69
lockRankMcentral // For !go115NewMCentralImpl
70
70
lockRankSpine // For !go115NewMCentralImpl
71
71
lockRankSpanSetSpine
72
+ lockRankGscan
72
73
lockRankStackpool
73
74
lockRankStackLarge
74
75
lockRankDefer
@@ -84,6 +85,14 @@ const (
84
85
85
86
// Other leaf locks
86
87
lockRankGFree
88
+ // Generally, hchan must be acquired before gscan. But in one specific
89
+ // case (in syncadjustsudogs from markroot after the g has been suspended
90
+ // by suspendG), we allow gscan to be acquired, and then an hchan lock. To
91
+ // allow this case, we get this lockRankHchanLeaf rank in
92
+ // syncadjustsudogs(), rather than lockRankHchan. By using this special
93
+ // rank, we don't allow any further locks to be acquired other than more
94
+ // hchan locks.
95
+ lockRankHchanLeaf
87
96
88
97
// Leaf locks with no dependencies, so these constants are not actually used anywhere.
89
98
// There are other architecture-dependent leaf locks as well.
@@ -141,6 +150,7 @@ var lockNames = []string{
141
150
lockRankMcentral : "mcentral" ,
142
151
lockRankSpine : "spine" ,
143
152
lockRankSpanSetSpine : "spanSetSpine" ,
153
+ lockRankGscan : "gscan" ,
144
154
lockRankStackpool : "stackpool" ,
145
155
lockRankStackLarge : "stackLarge" ,
146
156
lockRankDefer : "defer" ,
@@ -152,7 +162,8 @@ var lockNames = []string{
152
162
153
163
lockRankGlobalAlloc : "globalAlloc.mutex" ,
154
164
155
- lockRankGFree : "gFree" ,
165
+ lockRankGFree : "gFree" ,
166
+ lockRankHchanLeaf : "hchanLeaf" ,
156
167
157
168
lockRankNewmHandoff : "newmHandoff.lock" ,
158
169
lockRankDebugPtrmask : "debugPtrmask.lock" ,
@@ -217,16 +228,18 @@ var lockPartialOrder [][]lockRank = [][]lockRank{
217
228
lockRankMcentral : {lockRankScavenge , lockRankForcegc , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankAllg , lockRankAllp , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan },
218
229
lockRankSpine : {lockRankScavenge , lockRankAssistQueue , lockRankCpuprof , lockRankSched , lockRankAllg , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan },
219
230
lockRankSpanSetSpine : {lockRankScavenge , lockRankForcegc , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankAllg , lockRankAllp , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan },
220
- lockRankStackpool : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankHchan , lockRankFin , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankTrace , lockRankTraceStackTab , lockRankNetpollInit , lockRankRwmutexR , lockRankMcentral , lockRankSpine , lockRankSpanSetSpine },
221
- lockRankStackLarge : {lockRankAssistQueue , lockRankSched , lockRankItab , lockRankHchan , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankMcentral , lockRankSpanSetSpine },
231
+ lockRankGscan : {lockRankScavenge , lockRankForcegc , lockRankSweepWaiters , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankHchan , lockRankFin , lockRankTraceBuf , lockRankTraceStrings , lockRankRoot , lockRankNotifyList , lockRankProf , lockRankGcBitsArenas , lockRankTrace , lockRankTraceStackTab , lockRankNetpollInit , lockRankMcentral , lockRankSpine , lockRankSpanSetSpine },
232
+ lockRankStackpool : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankHchan , lockRankFin , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankTrace , lockRankTraceStackTab , lockRankNetpollInit , lockRankRwmutexR , lockRankMcentral , lockRankSpine , lockRankSpanSetSpine , lockRankGscan },
233
+ lockRankStackLarge : {lockRankAssistQueue , lockRankSched , lockRankItab , lockRankHchan , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankMcentral , lockRankSpanSetSpine , lockRankGscan },
222
234
lockRankDefer : {},
223
235
lockRankSudog : {lockRankNotifyList , lockRankHchan },
224
- lockRankWbufSpans : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankSweep , lockRankSched , lockRankAllg , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankHchan , lockRankNotifyList , lockRankTraceStrings , lockRankMspanSpecial , lockRankProf , lockRankRoot , lockRankDefer , lockRankSudog },
225
- lockRankMheap : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankAllg , lockRankAllp , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan , lockRankMspanSpecial , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankMcentral , lockRankStackpool , lockRankStackLarge , lockRankDefer , lockRankSudog , lockRankWbufSpans , lockRankSpanSetSpine },
236
+ lockRankWbufSpans : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankSweep , lockRankSched , lockRankAllg , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankHchan , lockRankNotifyList , lockRankTraceStrings , lockRankMspanSpecial , lockRankProf , lockRankRoot , lockRankGscan , lockRankDefer , lockRankSudog },
237
+ lockRankMheap : {lockRankScavenge , lockRankSweepWaiters , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankAllg , lockRankAllp , lockRankPollDesc , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan , lockRankMspanSpecial , lockRankProf , lockRankGcBitsArenas , lockRankRoot , lockRankMcentral , lockRankGscan , lockRankStackpool , lockRankStackLarge , lockRankDefer , lockRankSudog , lockRankWbufSpans , lockRankSpanSetSpine },
226
238
lockRankMheapSpecial : {lockRankScavenge , lockRankAssistQueue , lockRankCpuprof , lockRankSweep , lockRankSched , lockRankAllg , lockRankAllp , lockRankTimers , lockRankItab , lockRankReflectOffs , lockRankNotifyList , lockRankTraceBuf , lockRankTraceStrings , lockRankHchan },
227
239
lockRankGlobalAlloc : {lockRankProf , lockRankSpine , lockRankSpanSetSpine , lockRankMheap , lockRankMheapSpecial },
228
240
229
- lockRankGFree : {lockRankSched },
241
+ lockRankGFree : {lockRankSched },
242
+ lockRankHchanLeaf : {lockRankGscan , lockRankHchanLeaf },
230
243
231
244
lockRankNewmHandoff : {},
232
245
lockRankDebugPtrmask : {},
0 commit comments