mirror of
https://github.com/golang/go
synced 2024-11-18 07:04:52 -07:00
runtime: make runtime.callers walk calling G, not g0
Currently runtime.callers invokes gentraceback with the pc and sp of the G it is called from, but always passes g0 even if it was called from a regular g. Right now this has no ill effects because runtime.callers does not use either callback argument or the _TraceJumpStack flag, but it makes the code fragile and will break some upcoming changes. Fix this by lifting the getg() call outside of the systemstack in runtime.callers. Change-Id: I4e1e927961c0e0cd4dcf28693be47df7bae9e122 Reviewed-on: https://go-review.googlesource.com/10292 Reviewed-by: Daniel Morsing <daniel.morsing@gmail.com> Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
parent
91191e7b7b
commit
719efc70eb
@ -531,9 +531,10 @@ func traceback1(pc, sp, lr uintptr, gp *g, flags uint) {
|
||||
func callers(skip int, pcbuf []uintptr) int {
|
||||
sp := getcallersp(unsafe.Pointer(&skip))
|
||||
pc := uintptr(getcallerpc(unsafe.Pointer(&skip)))
|
||||
gp := getg()
|
||||
var n int
|
||||
systemstack(func() {
|
||||
n = gentraceback(pc, sp, 0, getg(), skip, &pcbuf[0], len(pcbuf), nil, nil, 0)
|
||||
n = gentraceback(pc, sp, 0, gp, skip, &pcbuf[0], len(pcbuf), nil, nil, 0)
|
||||
})
|
||||
return n
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user