From 5b6cd3d0cbd3f3f0a645e37526fabe35a7e75319 Mon Sep 17 00:00:00 2001 From: Hiro Date: Wed, 3 Jan 2024 00:10:58 +0000 Subject: sync: add Map.Clear Fixes #61696 Change-Id: I0a31afd3bc433fc84280d56f2798bda10da61eba GitHub-Last-Rev: 17bedc864f1685178a42b59f7083677a6124f831 GitHub-Pull-Request: golang/go#61702 Reviewed-on: https://go-review.googlesource.com/c/go/+/515015 Auto-Submit: Bryan Mills Reviewed-by: Cherry Mui Reviewed-by: qiulaidongfeng <2645477756@qq.com> Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/sync/map_reference_test.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/sync/map_reference_test.go') diff --git a/src/sync/map_reference_test.go b/src/sync/map_reference_test.go index aa5ebf352f..283da0f3a9 100644 --- a/src/sync/map_reference_test.go +++ b/src/sync/map_reference_test.go @@ -13,7 +13,7 @@ import ( // mapInterface is the interface Map implements. type mapInterface interface { - Load(any) (any, bool) + Load(key any) (value any, ok bool) Store(key, value any) LoadOrStore(key, value any) (actual any, loaded bool) LoadAndDelete(key any) (value any, loaded bool) @@ -22,6 +22,7 @@ type mapInterface interface { CompareAndSwap(key, old, new any) (swapped bool) CompareAndDelete(key, old any) (deleted bool) Range(func(key, value any) (shouldContinue bool)) + Clear() } var ( @@ -144,6 +145,13 @@ func (m *RWMutexMap) Range(f func(key, value any) (shouldContinue bool)) { } } +func (m *RWMutexMap) Clear() { + m.mu.Lock() + defer m.mu.Unlock() + + clear(m.dirty) +} + // DeepCopyMap is an implementation of mapInterface using a Mutex and // atomic.Value. It makes deep copies of the map on every write to avoid // acquiring the Mutex in Load. @@ -269,3 +277,10 @@ func (m *DeepCopyMap) dirty() map[any]any { } return dirty } + +func (m *DeepCopyMap) Clear() { + m.mu.Lock() + defer m.mu.Unlock() + + m.clean.Store((map[any]any)(nil)) +} -- cgit v1.3