Skip to content

Commit 41dfd44

Browse files
committed
runtime: preserve panic owner during rethrow
1 parent edbf1c6 commit 41dfd44

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

runtime/internal/runtime/z_baremetal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func Rethrow(link *Defer) {
2121
c.Printf(c.Str("fatal error\n"))
2222
c.Exit(2)
2323
} else {
24-
if ptr := panicKey.Get(); ptr != nil {
24+
if ptr := panicKey.Get(); ptr != nil && link == GetThreadDefer() {
2525
node := (*panicNode)(ptr)
2626
node.defer_ = link
2727
}

runtime/internal/runtime/z_default.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ func Rethrow(link *Defer) {
2727
c.Exit(2)
2828
} else {
2929
node := (*panicNode)(ptr)
30-
node.defer_ = link
30+
if link == (*Defer)(c.GoDeferData()) {
31+
node.defer_ = link
32+
}
3133
c.Siglongjmp(link.Addr, 1)
3234
}
3335
} else if ptr := goexitKey.Get(); ptr != nil {

0 commit comments

Comments
 (0)