From 44909beb5b35cf7230ec674708f3af90638c18b8 Mon Sep 17 00:00:00 2001 From: diamondburned Date: Sun, 29 Nov 2020 17:19:05 -0800 Subject: [PATCH] Moreatomic: Fixed LoadOrStore sentinel bug --- internal/moreatomic/syncmap.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/moreatomic/syncmap.go b/internal/moreatomic/syncmap.go index 0677f18..6a68cdb 100644 --- a/internal/moreatomic/syncmap.go +++ b/internal/moreatomic/syncmap.go @@ -31,13 +31,13 @@ func (sm *Map) Reset() error { // LoadOrStore loads an existing value or stores a new value created from the // given constructor then return that value. -func (sm *Map) LoadOrStore(k interface{}) (v interface{}, loaded bool) { +func (sm *Map) LoadOrStore(k interface{}) (lv interface{}, loaded bool) { smap := sm.smap.Load().(*sync.Map) - v, loaded = smap.LoadOrStore(k, sentinel) - if loaded { - v = sm.ctor() - smap.Store(k, v) + lv, loaded = smap.LoadOrStore(k, sentinel) + if !loaded { + lv = sm.ctor() + smap.Store(k, lv) } return