Index: base/memory/discardable_memory_ashmem.cc |
diff --git a/base/memory/discardable_memory_ashmem.cc b/base/memory/discardable_memory_ashmem.cc |
index f8300086abf45a75fd38de2b2d7164e7e190854e..a590e531b7a1e9749f80fce38c62c15aeaa4cc5d 100644 |
--- a/base/memory/discardable_memory_ashmem.cc |
+++ b/base/memory/discardable_memory_ashmem.cc |
@@ -22,37 +22,40 @@ DiscardableMemoryAshmem::DiscardableMemoryAshmem( |
DiscardableMemoryAshmem::~DiscardableMemoryAshmem() { |
if (is_locked_) |
- manager_->ReleaseLock(this); |
+ Unlock(); |
manager_->Unregister(this); |
} |
bool DiscardableMemoryAshmem::Initialize() { |
- return Lock() == DISCARDABLE_MEMORY_LOCK_STATUS_PURGED; |
+ return Lock() != DISCARDABLE_MEMORY_LOCK_STATUS_FAILED; |
} |
DiscardableMemoryLockStatus DiscardableMemoryAshmem::Lock() { |
+ DCHECK(!is_locked_); |
+ |
bool purged = false; |
if (!manager_->AcquireLock(this, &purged)) |
return DISCARDABLE_MEMORY_LOCK_STATUS_FAILED; |
+ is_locked_ = true; |
return purged ? DISCARDABLE_MEMORY_LOCK_STATUS_PURGED |
: DISCARDABLE_MEMORY_LOCK_STATUS_SUCCESS; |
} |
void DiscardableMemoryAshmem::Unlock() { |
+ DCHECK(is_locked_); |
manager_->ReleaseLock(this); |
+ is_locked_ = false; |
} |
void* DiscardableMemoryAshmem::Memory() const { |
+ DCHECK(is_locked_); |
DCHECK(ashmem_chunk_); |
return ashmem_chunk_->Memory(); |
} |
bool DiscardableMemoryAshmem::AllocateAndAcquireLock() { |
- DCHECK(!is_locked_); |
- is_locked_ = true; |
- |
if (ashmem_chunk_) |
return ashmem_chunk_->Lock(); |
@@ -61,13 +64,10 @@ bool DiscardableMemoryAshmem::AllocateAndAcquireLock() { |
} |
void DiscardableMemoryAshmem::ReleaseLock() { |
- DCHECK(is_locked_); |
ashmem_chunk_->Unlock(); |
- is_locked_ = false; |
} |
void DiscardableMemoryAshmem::Purge() { |
- DCHECK(!is_locked_); |
ashmem_chunk_.reset(); |
} |