mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: let stack copier update Panic structs for us
It already is updating parts of them; we're just getting lucky retraversing them and not finding much to do. Change argp to a pointer so that it will be updated too. Existing tests break if you apply the change to adjustpanics without also updating the type of argp. LGTM=khr R=khr CC=golang-codereviews https://golang.org/cl/139380043
This commit is contained in:
parent
c93f74d34b
commit
0f99a91bb5
3 changed files with 13 additions and 15 deletions
|
|
@ -287,9 +287,9 @@ func gopanic(e interface{}) {
|
|||
gp._defer = (*_defer)(noescape(unsafe.Pointer(&dabort)))
|
||||
p._defer = d
|
||||
|
||||
p.argp = getargp(0)
|
||||
p.argp = unsafe.Pointer(getargp(0))
|
||||
reflectcall(unsafe.Pointer(d.fn), unsafe.Pointer(&d.args), uint32(d.siz), uint32(d.siz))
|
||||
p.argp = 0
|
||||
p.argp = nil
|
||||
|
||||
// reflectcall did not panic. Remove dabort.
|
||||
if gp._defer != &dabort {
|
||||
|
|
@ -362,7 +362,7 @@ func gorecover(argp uintptr) interface{} {
|
|||
// If they match, the caller is the one who can recover.
|
||||
gp := getg()
|
||||
p := gp._panic
|
||||
if p != nil && !p.recovered && argp == p.argp {
|
||||
if p != nil && !p.recovered && argp == uintptr(p.argp) {
|
||||
p.recovered = true
|
||||
return p.arg
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue