From b53cb6c78b79d1e9c251ee1f0904a3068dbc884f Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 15 Sep 2022 23:24:23 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E7=BB=86=E5=8C=96=E4=BA=91=E7=AB=AF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=81=E6=8F=90=E5=8D=87=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E6=80=A7=20Fix=20https://github.com/siyuan-note/siyuan/issues/?= =?UTF-8?q?5887?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/file.go | 6 ++++++ kernel/model/sync.go | 3 +++ kernel/model/transaction.go | 7 +++++-- kernel/model/upload.go | 6 ++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kernel/model/file.go b/kernel/model/file.go index f409586ad..354bf5219 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -918,9 +918,12 @@ func loadNodesByMode(node *ast.Node, inputIndex, mode, size int, isDoc, isHeadin } func writeJSONQueue(tree *parse.Tree) (err error) { + writingDataLock.Lock() if err = filesys.WriteTree(tree); nil != err { + writingDataLock.Unlock() return } + writingDataLock.Unlock() sql.UpsertTreeQueue(tree) return } @@ -931,9 +934,12 @@ func indexWriteJSONQueue(tree *parse.Tree) (err error) { } func renameWriteJSONQueue(tree *parse.Tree, oldHPath string) (err error) { + writingDataLock.Unlock() if err = filesys.WriteTree(tree); nil != err { + writingDataLock.Unlock() return } + writingDataLock.Unlock() sql.RenameTreeQueue(tree, oldHPath) treenode.ReindexBlockTree(tree) return diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 0133d5f64..bb6abf522 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -63,6 +63,9 @@ func SyncData(boot, exit, byHand bool) { return } + writingDataLock.Lock() + defer writingDataLock.Unlock() + if util.IsMutexLocked(&syncLock) { logging.LogWarnf("sync is in progress") planSyncAfter(30 * time.Second) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index b98d322b4..44c81c175 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -110,9 +110,12 @@ func AutoFlushTx() { } } +var txLock = sync.Mutex{} + func flushTx() { - writingDataLock.Lock() - defer writingDataLock.Unlock() + txLock.Lock() + defer txLock.Unlock() + defer logging.Recover() currentTx = mergeTx() diff --git a/kernel/model/upload.go b/kernel/model/upload.go index a327cbc67..75f0dcdaa 100644 --- a/kernel/model/upload.go +++ b/kernel/model/upload.go @@ -34,6 +34,9 @@ import ( ) func InsertLocalAssets(id string, assetPaths []string) (succMap map[string]interface{}, err error) { + writingDataLock.Lock() + defer writingDataLock.Unlock() + succMap = map[string]interface{}{} bt := treenode.GetBlockTree(id) @@ -101,6 +104,9 @@ func Upload(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(200, ret) + writingDataLock.Lock() + defer writingDataLock.Unlock() + form, err := c.MultipartForm() if nil != err { logging.LogErrorf("insert asset failed: %s", err)