Просмотр исходного кода

:art: Improve .sy data file writing transaction https://github.com/siyuan-note/siyuan/issues/11834

Daniel 1 год назад
Родитель
Сommit
abc3eb76c5
1 измененных файлов с 9 добавлено и 4 удалено
  1. 9 4
      kernel/model/transaction.go

+ 9 - 4
kernel/model/transaction.go

@@ -72,13 +72,14 @@ func WaitForWritingFiles() {
 }
 }
 
 
 var (
 var (
-	txQueue   = make(chan *Transaction, 7)
-	flushLock = sync.Mutex{}
+	txQueue    = make(chan *Transaction, 7)
+	flushLock  = sync.Mutex{}
+	isFlushing = false
 )
 )
 
 
 func isWritingFiles() bool {
 func isWritingFiles() bool {
 	time.Sleep(time.Duration(50) * time.Millisecond)
 	time.Sleep(time.Duration(50) * time.Millisecond)
-	return 0 < len(txQueue)
+	return 0 < len(txQueue) || isFlushing
 }
 }
 
 
 func init() {
 func init() {
@@ -95,7 +96,11 @@ func init() {
 func flushTx(tx *Transaction) {
 func flushTx(tx *Transaction) {
 	defer logging.Recover()
 	defer logging.Recover()
 	flushLock.Lock()
 	flushLock.Lock()
-	defer flushLock.Unlock()
+	isFlushing = true
+	defer func() {
+		isFlushing = false
+		flushLock.Unlock()
+	}()
 
 
 	start := time.Now()
 	start := time.Now()
 	if txErr := performTx(tx); nil != txErr {
 	if txErr := performTx(tx); nil != txErr {