Commit bdc14698 authored by Dmitry Vyukov's avatar Dmitry Vyukov

runtime: unwire g/m in dropg always

Currently dropg does not unwire locked g/m.
This is unnecessary distiction between locked and non-locked g/m.
We always restart goroutines with execute which re-wires g/m.

First, this produces false sense that this distinction is necessary.
Second, it can confuse some sanity and cross checks. For example,
if we check that g/m are unwired before we wire them in execute,
the check will fail for locked g/m. I've hit this while doing some
race detector changes, When we deschedule a goroutine and run
scheduler code, m.curg is generally nil, but not for locked ms.

Remove the distinction.

Change-Id: I3b87a28ff343baa1d564aab1f821b582a84dee07
Reviewed-on: https://go-review.googlesource.com/19950Reviewed-by: 's avatarAustin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 3b3d58e1
......@@ -2081,10 +2081,8 @@ top:
func dropg() {
_g_ := getg()
if _g_.m.lockedg == nil {
_g_.m.curg.m = nil
_g_.m.curg = nil
}
_g_.m.curg.m = nil
_g_.m.curg = nil
}
func parkunlock_c(gp *g, lock unsafe.Pointer) bool {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment