| 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 d91bd15c95a0881fb74f488d5e4cefa1b3c3b734..86822a2aa329fa3fbadeaa0399009664dba958a9 100644
|
| --- a/content/child/child_discardable_shared_memory_manager.cc
|
| +++ b/content/child/child_discardable_shared_memory_manager.cc
|
| @@ -53,19 +53,17 @@ class DiscardableMemoryShmemChunkImpl
|
| DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryShmemChunkImpl);
|
| };
|
|
|
| -void DeletedDiscardableSharedMemory(scoped_refptr<ThreadSafeSender> sender,
|
| - DiscardableSharedMemoryId id) {
|
| - sender->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
|
| -}
|
| -
|
| } // namespace
|
|
|
| ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager(
|
| ThreadSafeSender* sender)
|
| - : heap_(base::GetPageSize()), sender_(sender) {
|
| + : heap_(base::GetPageSize()), sender_(sender), weak_ptr_factory_(this) {
|
| }
|
|
|
| ChildDiscardableSharedMemoryManager::~ChildDiscardableSharedMemoryManager() {
|
| + // Cancel all DeletedDiscardableSharedMemory callbacks.
|
| + weak_ptr_factory_.InvalidateWeakPtrs();
|
| +
|
| // TODO(reveman): Determine if this DCHECK can be enabled. crbug.com/430533
|
| // DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists());
|
| if (heap_.GetSize())
|
| @@ -150,9 +148,11 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(
|
| AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id));
|
|
|
| // Create span for allocated memory.
|
| - scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(
|
| - heap_.Grow(shared_memory.Pass(), allocation_size_in_bytes,
|
| - base::Bind(&DeletedDiscardableSharedMemory, sender_, new_id)));
|
| + scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow(
|
| + shared_memory.Pass(), allocation_size_in_bytes,
|
| + base::Bind(
|
| + &ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory,
|
| + weak_ptr_factory_.GetWeakPtr(), new_id)));
|
|
|
| // Unlock and insert any left over memory into free lists.
|
| if (pages < pages_to_allocate) {
|
| @@ -255,6 +255,11 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableSharedMemory(
|
| return memory.Pass();
|
| }
|
|
|
| +void ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory(
|
| + DiscardableSharedMemoryId id) {
|
| + sender_->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
|
| +}
|
| +
|
| void ChildDiscardableSharedMemoryManager::MemoryUsageChanged(
|
| size_t new_bytes_total,
|
| size_t new_bytes_free) const {
|
|
|