From dad32f953222ceaeacbcb3f9354e397118a679b1 Mon Sep 17 00:00:00 2001 From: Tyler Bunnell Date: Mon, 19 May 2014 21:00:24 -0600 Subject: [PATCH] Switch to RWMutex --- context.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/context.go b/context.go index bcc3faa..3c55c5f 100644 --- a/context.go +++ b/context.go @@ -11,7 +11,7 @@ import ( ) var ( - mutex sync.Mutex + mutex sync.RWMutex data = make(map[*http.Request]map[interface{}]interface{}) datat = make(map[*http.Request]int64) ) @@ -29,8 +29,8 @@ func Set(r *http.Request, key, val interface{}) { // Get returns a value stored for a given key in a given request. func Get(r *http.Request, key interface{}) interface{} { - mutex.Lock() - defer mutex.Unlock() + mutex.RLock() + defer mutex.RUnlock() if data[r] != nil { return data[r][key] } @@ -39,8 +39,8 @@ func Get(r *http.Request, key interface{}) interface{} { // GetOk returns stored value and presence state like multi-value return of map access. func GetOk(r *http.Request, key interface{}) (interface{}, bool) { - mutex.Lock() - defer mutex.Unlock() + mutex.RLock() + defer mutex.RUnlock() if _, ok := data[r]; ok { value, ok := data[r][key] return value, ok @@ -50,8 +50,8 @@ func GetOk(r *http.Request, key interface{}) (interface{}, bool) { // GetAll returns all stored values for the request as a map. Nil is returned for invalid requests. func GetAll(r *http.Request) map[interface{}]interface{} { - mutex.Lock() - defer mutex.Unlock() + mutex.RLock() + defer mutex.RUnlock() if context, ok := data[r]; ok { return context @@ -62,8 +62,8 @@ func GetAll(r *http.Request) map[interface{}]interface{} { // GetAllOk returns all stored values for the request as a map. It returns not // ok if the request was never registered. func GetAllOk(r *http.Request) (map[interface{}]interface{}, bool) { - mutex.Lock() - defer mutex.Unlock() + mutex.RLock() + defer mutex.RUnlock() context, ok := data[r] return context, ok