runtime: don't use runtime_lock in __go_get_backtrace_state
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 21 Jul 2017 18:27:35 +0000 (18:27 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 21 Jul 2017 18:27:35 +0000 (18:27 +0000)
commitdf206c6e77551b7eebfa1b7995b2556ac369f4fd
treeac8824d9cde261316f55212382c6ca9eb2255bd7
parent2401ffc3fe5f79e7a1087d8f98f5e3b8bbb1e379
runtime: don't use runtime_lock in __go_get_backtrace_state

    If getSiginfo does not know how to determine the PC, it will call
    runtime_callers. That can happen in a thread that was started by
    non-Go code, in which case the TLS variable g will not be set, in
    which case runtime_lock will crash.

    Avoid the problem by using atomic operations for the lock. This is OK
    since creating a backtrace state is fast and never blocks.

    The test case is TestCgoExternalThreadSIGPROF in the runtime package
    on a system that getSiginfo doesn't handle specially.

    Updates golang/go#20931

    Reviewed-on: https://go-review.googlesource.com/50650

From-SVN: r250439
gcc/go/gofrontend/MERGE
libgo/runtime/go-caller.c