impl/memory: Fix memcache stats race.

Fix a race in memcache stats that was caused by modification of common
stats varibles while holding a possibly-shared RLock. This fix switches
locking from RWMutex to Mutex, since potentially every access contains
mutations to the shared state.

BUG=None
TEST=local
  - Re-ran external test with fix, race no longer triggered.

R=iannucci@chromium.org

Review-Url: https://codereview.chromium.org/2554793002
diff --git a/impl/memory/memcache.go b/impl/memory/memcache.go
index 9e2d55c..624617b 100644
--- a/impl/memory/memcache.go
+++ b/impl/memory/memcache.go
@@ -78,7 +78,7 @@
 }
 
 type memcacheData struct {
-	lock  sync.RWMutex
+	lock  sync.Mutex
 	items map[string]*mcDataItem
 	casID uint64
 
@@ -258,8 +258,8 @@
 
 	for i, k := range keys {
 		itms[i], errs[i] = func() (mc.Item, error) {
-			m.data.lock.RLock()
-			defer m.data.lock.RUnlock()
+			m.data.lock.Lock()
+			defer m.data.lock.Unlock()
 			val, err := m.data.retrieveLocked(now, k)
 			if err != nil {
 				return nil, err
@@ -345,8 +345,8 @@
 }
 
 func (m *memcacheImpl) Stats() (*mc.Statistics, error) {
-	m.data.lock.RLock()
-	defer m.data.lock.RUnlock()
+	m.data.lock.Lock()
+	defer m.data.lock.Unlock()
 
 	ret := m.data.stats
 	return &ret, nil