• Michael Anthony Knyszek's avatar
    runtime: release worldsema before Gosched in STW GC mode · 05511a5c
    Michael Anthony Knyszek authored
    After CL 182657 we no longer hold worldsema across the GC, we hold
    gcsema instead.
    
    However in STW GC mode we don't release worldsema before calling Gosched
    on the user goroutine (note that user goroutines are disabled during STW
    GC) so that user goroutine holds onto it. When the GC is done and the
    runtime inevitably wants to "stop the world" again (though there isn't
    much to stop) it'll sit there waiting for worldsema which won't be
    released until the aforementioned goroutine is scheduled, which it won't
    be until the GC is done!
    
    So, we have a deadlock.
    
    The fix is easy: just release worldsema before calling Gosched.
    
    Fixes #34736.
    
    Change-Id: Ia50db22ebed3176114e7e60a7edaf82f8535c1b4
    Reviewed-on: https://go-review.googlesource.com/c/go/+/208379
    Run-TryBot: Michael Knyszek <mknyszek@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    05511a5c
mgc.go 74.9 KB