From 25590c0db2e1362c1edda9a922847c1a78f1057e Mon Sep 17 00:00:00 2001 From: gotoeasy Date: Tue, 14 Nov 2023 12:29:27 +0800 Subject: [PATCH] 0.12.4 --- glc/ldb/storage/indexdoc/index_doc_storage.go | 14 +++++++++++--- glc/ldb/storage/indexword/index_word_storage.go | 14 +++++++++++--- glc/ldb/storage/logdata/logdata_storage.go | 14 +++++++++++--- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/glc/ldb/storage/indexdoc/index_doc_storage.go b/glc/ldb/storage/indexdoc/index_doc_storage.go index e8920d2..918ff39 100644 --- a/glc/ldb/storage/indexdoc/index_doc_storage.go +++ b/glc/ldb/storage/indexdoc/index_doc_storage.go @@ -29,6 +29,7 @@ type DocIndexStorage struct { var idxMu sync.Mutex var mapStorage map[string](*DocIndexStorage) +var mapStorageMu sync.Mutex func init() { mapStorage = make(map[string](*DocIndexStorage)) @@ -55,6 +56,8 @@ func NewDocIndexStorage(storeName string) *DocIndexStorage { // 存储器,文 } // 缓存无则锁后创建返回并存缓存 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 idxMu.Lock() // 上锁 defer idxMu.Unlock() // 解锁 cacheStore = getStorage(cacheName) // 再次尝试取用缓存中存储器 @@ -132,8 +135,10 @@ func (s *DocIndexStorage) Close() { return } - s.mu.Lock() // 对象锁 - defer s.mu.Unlock() // 对象解锁 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 + s.mu.Lock() // 对象锁 + defer s.mu.Unlock() // 对象解锁 if s.closing { return } @@ -159,7 +164,10 @@ func (s *DocIndexStorage) IsClose() bool { func onExit() { for k := range mapStorage { - mapStorage[k].Close() + s := mapStorage[k] + if s != nil { + s.Close() + } } cmn.Info("退出DocIndexStorage") } diff --git a/glc/ldb/storage/indexword/index_word_storage.go b/glc/ldb/storage/indexword/index_word_storage.go index 1d435ec..49d6bb1 100644 --- a/glc/ldb/storage/indexword/index_word_storage.go +++ b/glc/ldb/storage/indexword/index_word_storage.go @@ -34,6 +34,7 @@ var zeroUint16Bytes []byte = cmn.Uint16ToBytes(0) // 索引件数的key var idxMu sync.Mutex var mapStorage map[string](*WordIndexStorage) +var mapStorageMu sync.Mutex func init() { mapStorage = make(map[string](*WordIndexStorage)) @@ -60,6 +61,8 @@ func NewWordIndexStorage(storeName string) *WordIndexStorage { // 存储器, } // 缓存无则锁后创建返回并存缓存 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 idxMu.Lock() // 上锁 defer idxMu.Unlock() // 解锁 cacheStore = getStorage(cacheName) // 再次尝试取用缓存中存储器 @@ -191,8 +194,10 @@ func (s *WordIndexStorage) Close() { return } - s.mu.Lock() // 对象锁 - defer s.mu.Unlock() // 对象解锁 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 + s.mu.Lock() // 对象锁 + defer s.mu.Unlock() // 对象解锁 if s.closing { return } @@ -218,7 +223,10 @@ func (s *WordIndexStorage) IsClose() bool { func onExit() { for k := range mapStorage { - mapStorage[k].Close() + s := mapStorage[k] + if s != nil { + s.Close() + } } cmn.Info("退出WordIndexStorage") } diff --git a/glc/ldb/storage/logdata/logdata_storage.go b/glc/ldb/storage/logdata/logdata_storage.go index e229b46..44a4837 100644 --- a/glc/ldb/storage/logdata/logdata_storage.go +++ b/glc/ldb/storage/logdata/logdata_storage.go @@ -39,6 +39,7 @@ type LogDataStorage struct { var zeroUint32Bytes []byte = cmn.Uint32ToBytes(0) var ldbMu sync.Mutex var mapStorage map[string](*LogDataStorage) +var mapStorageMu sync.Mutex func init() { mapStorage = make(map[string](*LogDataStorage)) @@ -65,6 +66,8 @@ func NewLogDataStorage(storeName string) *LogDataStorage { // 存储器,文档 } // 缓存无则锁后创建返回并存缓存 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 ldbMu.Lock() // 上锁 defer ldbMu.Unlock() // 解锁 cacheStore = getCacheStore(cacheName) // 再次尝试取用缓存中存储器 @@ -280,8 +283,10 @@ func (s *LogDataStorage) Close() { return } - s.mu.Lock() // 锁 - defer s.mu.Unlock() // 解锁 + mapStorageMu.Lock() // 缓存map锁 + defer mapStorageMu.Unlock() // 缓存map解锁 + s.mu.Lock() // 锁 + defer s.mu.Unlock() // 解锁 if s.closing { return } @@ -361,7 +366,10 @@ func (s *LogDataStorage) IsClose() bool { func onExit() { for k := range mapStorage { - mapStorage[k].Close() + s := mapStorage[k] + if s != nil { + s.Close() + } } cmn.Info("退出LogDataStorage") }