Index: content/child/child_discardable_shared_memory_manager.cc |
diff --git a/content/child/child_discardable_shared_memory_manager.cc b/content/child/child_discardable_shared_memory_manager.cc |
index d5b97a06153fec7c0a0dcbacfc7cfba4b20d36a6..85a746061eb29087c7d661b92139e3a8a430959a 100644 |
--- a/content/child/child_discardable_shared_memory_manager.cc |
+++ b/content/child/child_discardable_shared_memory_manager.cc |
@@ -72,10 +72,11 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( |
// Attempt to lock |free_span|. Delete span and search free list again |
// if locking failed. |
- if (!free_span->shared_memory()->Lock( |
+ if (free_span->shared_memory()->Lock( |
free_span->start() * base::GetPageSize() - |
reinterpret_cast<size_t>(free_span->shared_memory()->memory()), |
- free_span->length() * base::GetPageSize())) { |
+ free_span->length() * base::GetPageSize()) != |
+ base::DiscardableSharedMemory::SUCCESS) { |
heap_.DeleteSpan(free_span.Pass()); |
continue; |
} |
@@ -114,19 +115,29 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( |
bool ChildDiscardableSharedMemoryManager::LockSpan( |
DiscardableSharedMemoryHeap::Span* span) { |
base::AutoLock lock(lock_); |
- return span->shared_memory()->Lock( |
- span->start() * base::GetPageSize() - |
- reinterpret_cast<size_t>(span->shared_memory()->memory()), |
- span->length() * base::GetPageSize()); |
+ |
+ size_t offset = span->start() * base::GetPageSize() - |
+ reinterpret_cast<size_t>(span->shared_memory()->memory()); |
+ size_t length = span->length() * base::GetPageSize(); |
+ |
+ auto result = span->shared_memory()->Lock(offset, length); |
+ if (result == base::DiscardableSharedMemory::SUCCESS) |
danakj
2015/01/24 00:16:06
switch instead of series of ifs?
reveman
2015/01/24 00:27:48
Good idea. Done.
|
+ return true; |
+ if (result == base::DiscardableSharedMemory::PURGED) |
+ span->shared_memory()->Unlock(offset, length); |
+ |
+ return false; |
} |
void ChildDiscardableSharedMemoryManager::UnlockSpan( |
DiscardableSharedMemoryHeap::Span* span) { |
base::AutoLock lock(lock_); |
- return span->shared_memory()->Unlock( |
- span->start() * base::GetPageSize() - |
- reinterpret_cast<size_t>(span->shared_memory()->memory()), |
- span->length() * base::GetPageSize()); |
+ |
+ size_t offset = span->start() * base::GetPageSize() - |
+ reinterpret_cast<size_t>(span->shared_memory()->memory()); |
+ size_t length = span->length() * base::GetPageSize(); |
+ |
+ return span->shared_memory()->Unlock(offset, length); |
} |
bool ChildDiscardableSharedMemoryManager::IsSpanResident( |