• Austin Clements's avatar
    runtime: remove write barrier in WaitForSigusr1 · b8240483
    Austin Clements authored
    WaitForSigusr1 registers a callback to be called on SIGUSR1 directly
    from the runtime signal handler. Currently, this callback has a write
    barrier in it, which can crash with a nil P if the GC is active and
    the signal arrives on an M that doesn't have a P.
    
    Fix this by recording the ID of the M that receives the signal instead
    of the M itself, since that's all we needed anyway. To make sure there
    are no other problems, this also lifts the callback into a package
    function and marks it "go:nowritebarrierrec".
    
    Fixes #35248.
    
    Updates #35276, since in principle a write barrier at exactly the
    wrong time while entering the scheduler could cause issues, though I
    suspect that bug is unrelated.
    
    Change-Id: I47b4bc73782efbb613785a93e381d8aaf6850826
    Reviewed-on: https://go-review.googlesource.com/c/go/+/204620
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarThan McIntosh <thanm@google.com>
    Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
    Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
    b8240483
export_unix_test.go 1.74 KB