Chromium Code Reviews| Index: content/common/host_shared_bitmap_manager.cc |
| diff --git a/content/common/host_shared_bitmap_manager.cc b/content/common/host_shared_bitmap_manager.cc |
| index f913dba71bf0b5b31916fed5e5e431846837a4ac..2ebeb294e5c0729c2656fb95faf8e788a8e5bdc5 100644 |
| --- a/content/common/host_shared_bitmap_manager.cc |
| +++ b/content/common/host_shared_bitmap_manager.cc |
| @@ -63,6 +63,7 @@ HostSharedBitmapManagerClient::HostSharedBitmapManagerClient( |
| } |
| HostSharedBitmapManagerClient::~HostSharedBitmapManagerClient() { |
| + base::AutoLock lock(lock_); |
|
piman
2015/11/24 03:00:37
nit: I think you don't need this one (only 1 threa
|
| for (const auto& id : owned_bitmaps_) |
| manager_->ChildDeletedSharedBitmap(id); |
| } |
| @@ -74,7 +75,10 @@ void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild( |
| base::SharedMemoryHandle* shared_memory_handle) { |
| manager_->AllocateSharedBitmapForChild(process_handle, buffer_size, id, |
| shared_memory_handle); |
| - owned_bitmaps_.insert(id); |
| + if (*shared_memory_handle != base::SharedMemory::NULLHandle()) { |
| + base::AutoLock lock(lock_); |
| + owned_bitmaps_.insert(id); |
| + } |
| } |
| void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( |
| @@ -82,14 +86,20 @@ void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( |
| const base::SharedMemoryHandle& handle, |
| base::ProcessHandle process_handle, |
| const cc::SharedBitmapId& id) { |
| - manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, id); |
| - owned_bitmaps_.insert(id); |
| + if (manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, |
| + id)) { |
| + base::AutoLock lock(lock_); |
| + owned_bitmaps_.insert(id); |
| + } |
| } |
| void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( |
| const cc::SharedBitmapId& id) { |
| manager_->ChildDeletedSharedBitmap(id); |
| - owned_bitmaps_.erase(id); |
| + { |
| + base::AutoLock lock(lock_); |
| + owned_bitmaps_.erase(id); |
| + } |
| } |
| HostSharedBitmapManager::HostSharedBitmapManager() {} |
| @@ -176,14 +186,14 @@ bool HostSharedBitmapManager::OnMemoryDump( |
| return true; |
| } |
| -void HostSharedBitmapManager::ChildAllocatedSharedBitmap( |
| +bool HostSharedBitmapManager::ChildAllocatedSharedBitmap( |
| size_t buffer_size, |
| const base::SharedMemoryHandle& handle, |
| base::ProcessHandle process_handle, |
| const cc::SharedBitmapId& id) { |
| base::AutoLock lock(lock_); |
| if (handle_map_.find(id) != handle_map_.end()) |
| - return; |
| + return false; |
| scoped_refptr<BitmapData> data( |
| new BitmapData(process_handle, buffer_size)); |
| @@ -195,8 +205,9 @@ void HostSharedBitmapManager::ChildAllocatedSharedBitmap( |
| data->memory = |
| make_scoped_ptr(new base::SharedMemory(handle, false)); |
| #endif |
| - data->memory->Map(data->buffer_size); |
| - data->memory->Close(); |
| + data->memory->Map(data->buffer_size); |
| + data->memory->Close(); |
| + return true; |
| } |
| void HostSharedBitmapManager::AllocateSharedBitmapForChild( |