Sfoglia il codice sorgente

:art: 改进内核任务调度机制提升稳定性 https://github.com/siyuan-note/siyuan/issues/7113

Liang Ding 2 anni fa
parent
commit
7e014cb525

+ 2 - 2
kernel/model/box.go

@@ -486,7 +486,7 @@ func FullReindex() {
 }
 
 func fullReindex() {
-	util.PushEndlessProgress(Conf.Language(35))
+	util.PushMsg(Conf.Language(35), 60*1000*10)
 	WaitForWritingFiles()
 
 	if err := sql.InitDatabase(true); nil != err {
@@ -505,7 +505,7 @@ func fullReindex() {
 	treenode.SaveBlockTree(true)
 	LoadFlashcards()
 
-	util.PushEndlessProgress(Conf.Language(58))
+	util.PushMsg(Conf.Language(58), 7000)
 	go func() {
 		time.Sleep(1 * time.Second)
 		util.ReloadUI()

+ 1 - 0
kernel/model/conf.go

@@ -393,6 +393,7 @@ var exitLock = sync.Mutex{}
 func Close(force bool, execInstallPkg int) (exitCode int) {
 	exitLock.Lock()
 	defer exitLock.Unlock()
+	util.IsExiting = true
 
 	logging.LogInfof("exiting kernel [force=%v, execInstallPkg=%d]", force, execInstallPkg)
 	util.PushMsg(Conf.Language(95), 10000*60)

+ 2 - 3
kernel/model/index.go

@@ -69,8 +69,7 @@ func index(boxID string) {
 	var treeSize int64
 	i := 0
 
-	util.PushEndlessProgress(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files)))
-	defer util.PushClearProgress()
+	util.PushStatusBar(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files)))
 
 	for _, file := range files {
 		if file.isdir || !strings.HasSuffix(file.name, ".sy") {
@@ -101,7 +100,7 @@ func index(boxID string) {
 		treeSize += file.size
 		treeCount++
 		if 1 < i && 0 == i%64 {
-			util.PushEndlessProgress(fmt.Sprintf(Conf.Language(88), i, len(files)-i))
+			util.PushStatusBar(fmt.Sprintf(Conf.Language(88), i, len(files)-i))
 		}
 		i++
 	}

+ 4 - 0
kernel/sql/queue.go

@@ -104,6 +104,10 @@ func FlushQueue() {
 
 	context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar}
 	for _, op := range ops {
+		if util.IsExiting {
+			break
+		}
+
 		switch op.action {
 		case "upsert":
 			tree := op.upsertTree

+ 5 - 0
kernel/task/queue.go

@@ -17,6 +17,7 @@
 package task
 
 import (
+	"github.com/siyuan-note/siyuan/kernel/util"
 	"reflect"
 	"sync"
 	"time"
@@ -122,6 +123,10 @@ func Loop() {
 			continue
 		}
 
+		if util.IsExiting {
+			break
+		}
+
 		execTask(task)
 	}
 }

+ 10 - 10
kernel/treenode/blocktree.go

@@ -292,16 +292,16 @@ func ReindexBlockTree(tree *parse.Tree) {
 	blockTreesLock.Lock()
 	defer blockTreesLock.Unlock()
 
-	var ids []string
-	for _, b := range blockTrees {
-		if b.RootID == tree.ID {
-			ids = append(ids, b.ID)
-		}
-	}
-	ids = gulu.Str.RemoveDuplicatedElem(ids)
-	for _, id := range ids {
-		delete(blockTrees, id)
-	}
+	//var ids []string
+	//for _, b := range blockTrees {
+	//	if b.RootID == tree.ID {
+	//		ids = append(ids, b.ID)
+	//	}
+	//}
+	//ids = gulu.Str.RemoveDuplicatedElem(ids)
+	//for _, id := range ids {
+	//	delete(blockTrees, id)
+	//}
 
 	ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
 		if !entering || !n.IsBlock() {

+ 3 - 0
kernel/util/runtime.go

@@ -42,6 +42,9 @@ const (
 	ExitCodeFatal                 = 1  // 致命错误
 )
 
+// IsExiting 是否正在退出程序。
+var IsExiting = false
+
 func logBootInfo() {
 	logging.LogInfof("kernel is booting:\n"+
 		"    * ver [%s]\n"+