diff --git a/internal/caches/list_file_hash_map.go b/internal/caches/list_file_hash_map.go index 625de3d..5a772bb 100644 --- a/internal/caches/list_file_hash_map.go +++ b/internal/caches/list_file_hash_map.go @@ -133,7 +133,10 @@ func (this *FileListHashMap) Clean() { this.lockers[i].Lock() } - this.m = make([]map[uint64]zero.Zero, HashMapSharding) + // 这里不能简单清空 this.m ,避免导致别的数据无法写入 map 而产生 panic + for i := 0; i < HashMapSharding; i++ { + this.m[i] = map[uint64]zero.Zero{} + } for i := HashMapSharding - 1; i >= 0; i-- { this.lockers[i].Unlock() diff --git a/internal/caches/list_file_hash_map_test.go b/internal/caches/list_file_hash_map_test.go index f9481fa..d2080eb 100644 --- a/internal/caches/list_file_hash_map_test.go +++ b/internal/caches/list_file_hash_map_test.go @@ -125,6 +125,13 @@ func TestFileListHashMap_Delete(t *testing.T) { a.IsTrue(m.Len() == 0) } +func TestFileListHashMap_Clean(t *testing.T) { + var m = caches.NewFileListHashMap() + m.SetIsAvailable(true) + m.Clean() + m.Add("a") +} + func Benchmark_BigInt(b *testing.B) { var hash = stringutil.Md5("123456") b.ResetTimer()