aboutsummaryrefslogtreecommitdiff
path: root/src/sync/map_reference_test.go
diff options
context:
space:
mode:
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))
+}