From 071f3f9af8fb9d3b33ce2ebb3b79a5992fd93cb1 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 8 Dec 2023 20:14:26 +0800 Subject: [PATCH] :art: Improve kernel stability by eliminating some data races https://github.com/siyuan-note/siyuan/issues/9842 --- kernel/model/ocr.go | 8 ++++---- kernel/util/tesseract.go | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/model/ocr.go b/kernel/model/ocr.go index c8cb03c0a..75274a8d7 100644 --- a/kernel/model/ocr.go +++ b/kernel/model/ocr.go @@ -44,7 +44,7 @@ func autoOCRAssets() { util.AssetsTexts[p] = text util.AssetsTextsLock.Unlock() if "" != text { - util.AssetsTextsChanged = true + util.AssetsTextsChanged.Store(true) } if 7 <= i { // 一次任务中最多处理 7 张图片,防止长时间占用系统资源 break @@ -71,7 +71,7 @@ func cleanNotExistAssetsTexts() { for _, asset := range toRemoves { delete(util.AssetsTexts, asset) - util.AssetsTextsChanged = true + util.AssetsTextsChanged.Store(true) } return } @@ -134,7 +134,7 @@ func LoadAssetsTexts() { } func SaveAssetsTexts() { - if !util.AssetsTextsChanged { + if !util.AssetsTextsChanged.Load() { return } @@ -160,5 +160,5 @@ func SaveAssetsTexts() { logging.LogWarnf("save assets texts [size=%s] to [%s], elapsed [%.2fs]", humanize.Bytes(uint64(len(data))), assetsTextsPath, elapsed) } - util.AssetsTextsChanged = false + util.AssetsTextsChanged.Store(false) } diff --git a/kernel/util/tesseract.go b/kernel/util/tesseract.go index 7136bb616..ace365b4b 100644 --- a/kernel/util/tesseract.go +++ b/kernel/util/tesseract.go @@ -41,7 +41,7 @@ var ( TesseractMaxSize = 2 * 1000 * uint64(1000) AssetsTexts = map[string]string{} AssetsTextsLock = sync.Mutex{} - AssetsTextsChanged = false + AssetsTextsChanged = atomic.Bool{} TesseractLangs []string ) @@ -50,7 +50,7 @@ func SetAssetText(asset, text string) { AssetsTextsLock.Lock() AssetsTexts[asset] = text AssetsTextsLock.Unlock() - AssetsTextsChanged = true + AssetsTextsChanged.Store(true) } func ExistsAssetText(asset string) (ret bool) { @@ -76,7 +76,7 @@ func GetAssetText(asset string, force bool) (ret string) { AssetsTexts[asset] = ret AssetsTextsLock.Unlock() if "" != ret { - AssetsTextsChanged = true + AssetsTextsChanged.Store(true) } return }