]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: unwire g/m in dropg always
authorDmitry Vyukov <dvyukov@google.com>
Fri, 26 Feb 2016 09:43:09 +0000 (10:43 +0100)
committerDmitry Vyukov <dvyukov@google.com>
Fri, 26 Feb 2016 15:45:45 +0000 (15:45 +0000)
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/19950
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/proc.go

index d9c38f9cb05cd8b00caf763ad81878ba5091f74e..16237e98ec1cbcb74548e79aa0133c36e5fc3e6b 100644 (file)
@@ -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 {