]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't ignore success of cgo profiling tracebacks
authorAustin Clements <austin@google.com>
Wed, 6 Jan 2016 19:02:50 +0000 (14:02 -0500)
committerAustin Clements <austin@google.com>
Thu, 7 Jan 2016 19:40:26 +0000 (19:40 +0000)
If a sigprof happens during a cgo call, we traceback from the entry
point of the cgo call. However, if the SP is outside of the G's stack,
we'll then ignore this traceback, even if it was successful, and
overwrite it with just _ExternalCode.

Fix this by accepting any successful traceback, regardless of whether
we got it from a cgo entry point or from regular Go code.

Fixes #13466.

Change-Id: I5da9684361fc5964f44985d74a8cdf02ffefd213
Reviewed-on: https://go-review.googlesource.com/18327
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/proc.go

index fd8e161c1754b9506dfdfdf26ce6b7bfa26fa7ba..c6f55fa0350ead8515d18b6b55e28593b64d3ff6 100644 (file)
@@ -3024,7 +3024,7 @@ func sigprof(pc, sp, lr uintptr, gp *g, mp *m) {
                }
                n = gentraceback(pc, sp, lr, gp, 0, &stk[0], len(stk), nil, nil, flags)
        }
-       if !traceback || n <= 0 {
+       if n <= 0 {
                // Normal traceback is impossible or has failed.
                // See if it falls into several common cases.
                n = 0