Merge pull request #624 from vadmeste/pr_out_protect_exported_memory_object_api_by_a_mutex

Protect the exported method Delete() by a lock
master
Harshavardhana 9 years ago
commit 122d67625f
  1. 10
      pkg/storage/drivers/memory/memory_cache.go
  2. 2
      pkg/storage/drivers/memory/memory_multipart.go

@ -128,7 +128,7 @@ func (r *Cache) Set(key string, value interface{}) bool {
// remove random key if only we reach the maxSize threshold
for key := range r.items {
for (r.currentSize + valueLen) > r.maxSize {
r.Delete(key)
r.doDelete(key)
}
break
}
@ -145,13 +145,19 @@ func (r *Cache) Expire() {
defer r.Unlock()
for key := range r.items {
if !r.isValid(key) {
r.Delete(key)
r.doDelete(key)
}
}
}
// Delete deletes a given key if exists
func (r *Cache) Delete(key string) {
r.Lock()
defer r.Unlock()
r.doDelete(key)
}
func (r *Cache) doDelete(key string) {
if _, ok := r.items[key]; ok {
r.currentSize -= uint64(len(r.items[key].([]byte)))
delete(r.items, key)

@ -212,7 +212,7 @@ func (memory *memoryDriver) cleanupMultiparts(bucket, key, uploadID string) {
defer memory.lock.Unlock()
for i := 1; i <= memory.storedBuckets[bucket].multiPartSession[key].totalParts; i++ {
objectKey := bucket + "/" + getMultipartKey(key, uploadID, i)
memory.multiPartObjects.Delete(objectKey)
memory.multiPartObjects.doDelete(objectKey)
}
}

Loading…
Cancel
Save