فهرست منبع

:art: Improve kernel stability https://github.com/siyuan-note/siyuan/issues/9912

Daniel 1 سال پیش
والد
کامیت
b3d51ed94f
1فایلهای تغییر یافته به همراه14 افزوده شده و 0 حذف شده
  1. 14 0
      kernel/model/transaction.go

+ 14 - 0
kernel/model/transaction.go

@@ -21,6 +21,7 @@ import (
 	"errors"
 	"fmt"
 	"path/filepath"
+	"runtime/debug"
 	"strings"
 	"sync"
 	"sync/atomic"
@@ -168,6 +169,19 @@ func performTx(tx *Transaction) (ret *TxErr) {
 		return
 	}
 
+	defer func() {
+		if e := recover(); nil != e {
+			stack := debug.Stack()
+			msg := fmt.Sprintf("PANIC RECOVERED: %v\n\t%s\n", e, stack)
+			logging.LogErrorf(msg)
+
+			if 0 == tx.state.Load() {
+				tx.rollback()
+				return
+			}
+		}
+	}()
+
 	for _, op := range tx.DoOperations {
 		switch op.Action {
 		case "create":