diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go index 97ca42c..386d834 100644 --- a/dtmcli/dtmimp/utils.go +++ b/dtmcli/dtmimp/utils.go @@ -253,6 +253,7 @@ func RespAsErrorByJSONRPC(resp *resty.Response) error { // DeferDo a common defer do used in dtmcli/dtmgrpc func DeferDo(rerr *error, success func() error, fail func() error) { if x := recover(); x != nil { + *rerr = AsError(x) _ = fail() panic(x) } else if *rerr != nil { diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index 6c2d191..a0b6ff9 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -41,7 +41,9 @@ func TccGlobalTransaction2(dtm string, gid string, custom func(*Tcc), tccFunc Tc defer dtmimp.DeferDo(&rerr, func() error { return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "submit") }, func() error { - tcc.RollbackReason = rerr.Error() + if rerr != nil { + tcc.RollbackReason = rerr.Error() + } return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "abort") }) _, rerr = tccFunc(tcc)