From 13e23537292641193e9be84411b3893419eb70cb Mon Sep 17 00:00:00 2001 From: john Date: Sun, 3 May 2020 23:08:18 +0800 Subject: [PATCH] fix lock issue in function search for package garray --- container/garray/garray_normal_any.go | 16 +--------------- container/garray/garray_normal_int.go | 2 +- container/garray/garray_normal_str.go | 2 +- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/container/garray/garray_normal_any.go b/container/garray/garray_normal_any.go index 8801bb090..c72c0b3f3 100644 --- a/container/garray/garray_normal_any.go +++ b/container/garray/garray_normal_any.go @@ -473,21 +473,7 @@ func (a *Array) Contains(value interface{}) bool { // or returns -1 if not exists. func (a *Array) Search(value interface{}) int { a.mu.RLock() - if len(a.array) == 0 { - return -1 - } - result := -1 - for index, v := range a.array { - if v == value { - result = index - break - } - } - a.mu.RUnlock() - return result -} - -func (a *Array) doSearch(value interface{}) int { + defer a.mu.RUnlock() if len(a.array) == 0 { return -1 } diff --git a/container/garray/garray_normal_int.go b/container/garray/garray_normal_int.go index d32a45b7c..2ae611d2b 100644 --- a/container/garray/garray_normal_int.go +++ b/container/garray/garray_normal_int.go @@ -489,6 +489,7 @@ func (a *IntArray) Contains(value int) bool { // or returns -1 if not exists. func (a *IntArray) Search(value int) int { a.mu.RLock() + defer a.mu.RUnlock() if len(a.array) == 0 { return -1 } @@ -499,7 +500,6 @@ func (a *IntArray) Search(value int) int { break } } - a.mu.RUnlock() return result } diff --git a/container/garray/garray_normal_str.go b/container/garray/garray_normal_str.go index 929840eea..e880e2ae9 100644 --- a/container/garray/garray_normal_str.go +++ b/container/garray/garray_normal_str.go @@ -493,6 +493,7 @@ func (a *StrArray) ContainsI(value string) bool { // or returns -1 if not exists. func (a *StrArray) Search(value string) int { a.mu.RLock() + defer a.mu.RUnlock() if len(a.array) == 0 { return -1 } @@ -503,7 +504,6 @@ func (a *StrArray) Search(value string) int { break } } - a.mu.RUnlock() return result }