Browse Source

:zap: 改进创建文档性能 Fix https://github.com/siyuan-note/siyuan/issues/7175

Liang Ding 2 năm trước cách đây
mục cha
commit
cff223bc2d
1 tập tin đã thay đổi với 6 bổ sung8 xóa
  1. 6 8
      kernel/model/transaction.go

+ 6 - 8
kernel/model/transaction.go

@@ -64,8 +64,6 @@ func IsUnfoldHeading(transactions *[]*Transaction) bool {
 var (
 var (
 	txQueue     []*Transaction
 	txQueue     []*Transaction
 	txQueueLock = sync.Mutex{}
 	txQueueLock = sync.Mutex{}
-
-	currentTx *Transaction
 )
 )
 
 
 func WaitForWritingFiles() {
 func WaitForWritingFiles() {
@@ -86,20 +84,21 @@ func WaitForWritingFiles() {
 
 
 func isWritingFiles() bool {
 func isWritingFiles() bool {
 	time.Sleep(time.Duration(20) * time.Millisecond)
 	time.Sleep(time.Duration(20) * time.Millisecond)
-	if 0 < len(txQueue) || util.IsMutexLocked(&txQueueLock) {
-		return true
-	}
-	return nil != currentTx
+	return 0 < len(txQueue) || util.IsMutexLocked(&txQueueLock) || util.IsMutexLocked(&flushLock)
 }
 }
 
 
 func FlushTxJob() {
 func FlushTxJob() {
 	flushTx()
 	flushTx()
 }
 }
 
 
+var flushLock = sync.Mutex{}
+
 func flushTx() {
 func flushTx() {
 	defer logging.Recover()
 	defer logging.Recover()
+	flushLock.Lock()
+	defer flushLock.Unlock()
 
 
-	currentTx = mergeTx()
+	currentTx := mergeTx()
 	start := time.Now()
 	start := time.Now()
 	if txErr := performTx(currentTx); nil != txErr {
 	if txErr := performTx(currentTx); nil != txErr {
 		switch txErr.code {
 		switch txErr.code {
@@ -119,7 +118,6 @@ func flushTx() {
 			logging.LogWarnf("op tx [%dms]", elapsed)
 			logging.LogWarnf("op tx [%dms]", elapsed)
 		}
 		}
 	}
 	}
-	currentTx = nil
 }
 }
 
 
 func mergeTx() (ret *Transaction) {
 func mergeTx() (ret *Transaction) {