diff --git a/util.go b/util.go index a6264c6..f15927a 100644 --- a/util.go +++ b/util.go @@ -1,8 +1,13 @@ package posthog +import ( + "sync" +) + type SizeLimitedMap struct { ids map[string][]string size int + mu sync.Mutex } func newSizeLimitedMap(size int) *SizeLimitedMap { @@ -15,6 +20,8 @@ func newSizeLimitedMap(size int) *SizeLimitedMap { } func (sizeLimitedMap *SizeLimitedMap) add(key string, element string) { + sizeLimitedMap.mu.Lock() + defer sizeLimitedMap.mu.Unlock() if len(sizeLimitedMap.ids) >= sizeLimitedMap.size { sizeLimitedMap.ids = map[string][]string{} @@ -28,6 +35,9 @@ func (sizeLimitedMap *SizeLimitedMap) add(key string, element string) { } func (sizeLimitedMap *SizeLimitedMap) contains(key string, element string) bool { + sizeLimitedMap.mu.Lock() + defer sizeLimitedMap.mu.Unlock() + if val, ok := sizeLimitedMap.ids[key]; ok { for _, v := range val { if v == element { @@ -40,5 +50,8 @@ func (sizeLimitedMap *SizeLimitedMap) contains(key string, element string) bool } func (sizeLimitedMap *SizeLimitedMap) count() int { + sizeLimitedMap.mu.Lock() + defer sizeLimitedMap.mu.Unlock() + return len(sizeLimitedMap.ids) }