aboutsummaryrefslogtreecommitdiff
path: root/src/sync/map_reference_test.go
diff options
context:
space:
mode:
authorHiro <laciferin@gmail.com>2024-01-03 00:10:58 +0000
committerGopher Robot <gobot@golang.org>2024-02-01 15:34:22 +0000
commit5b6cd3d0cbd3f3f0a645e37526fabe35a7e75319 (patch)
tree70b282bd7b0fb3cf463948a0e94c8b980b580e5f /src/sync/map_reference_test.go
parent2f6a25f4478905db5e169019bf9dc39ab2a50f89 (diff)
downloadgo-5b6cd3d0cbd3f3f0a645e37526fabe35a7e75319.tar.xz
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 <bcmills@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: qiulaidongfeng <2645477756@qq.com> Reviewed-by: Bryan Mills <bcmills@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/sync/map_reference_test.go')
-rw-r--r--src/sync/map_reference_test.go17
1 files changed, 16 insertions, 1 deletions
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))
+}