• Cherry Zhang's avatar
    runtime: use innermost frame's func name for async preemption check · dcdee153
    Cherry Zhang authored
    We don't asynchronously preempt if we are in the runtime. We do
    this by checking the function name. However, it failed to take
    inlining into account. If a runtime function gets inlined into
    a non-runtime function, it can be preempted, and bad things can
    happen. One instance of this is dounlockOSThread inlined into
    UnlockOSThread which is in turn inlined into a non-runtime
    function.
    
    Fix this by using the innermost frame's function name.
    
    Change-Id: Ifa036ce1320700aaaefd829b4bee0d04d05c395d
    Reviewed-on: https://go-review.googlesource.com/c/go/+/211978
    Run-TryBot: Cherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarAustin Clements <austin@google.com>
    dcdee153
preempt.go 14.7 KB