mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: print user stack on other threads during GOTRACBEACK=crash
Currently, when printing tracebacks of other threads during GOTRACEBACK=crash, if the thread is on the system stack we print only the header for the user goroutine and fail to print its stack. This happens because we passed the g0 to traceback instead of curg. The g0 never has anything set in its gobuf, so traceback doesn't print anything. Fix this by passing _g_.m.curg to traceback instead of the g0. Fixes #19494. Change-Id: Idfabf94d6a725e9cdf94a3923dead6455ef3b217 Reviewed-on: https://go-review.googlesource.com/38012 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
f2e87158f0
commit
4b8f41daa6
3 changed files with 87 additions and 1 deletions
|
|
@ -336,3 +336,16 @@ func ReadMemStatsSlow() (base, slow MemStats) {
|
|||
startTheWorld()
|
||||
return
|
||||
}
|
||||
|
||||
// BlockOnSystemStack switches to the system stack, prints "x\n" to
|
||||
// stderr, and blocks in a stack containing
|
||||
// "runtime.blockOnSystemStackInternal".
|
||||
func BlockOnSystemStack() {
|
||||
systemstack(blockOnSystemStackInternal)
|
||||
}
|
||||
|
||||
func blockOnSystemStackInternal() {
|
||||
print("x\n")
|
||||
lock(&deadlock)
|
||||
lock(&deadlock)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue