diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 19:28:41 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-14 19:28:41 +0000 |
commit | 81fc59f761888440ef190cc5c35a2a1d06986183 (patch) | |
tree | efefe7e18d0caa39f2fb264e1f743f0a19bd951e /webkit/plugins/ppapi/ppb_buffer_impl.cc | |
parent | 790e6bed92413c0e8cafb42a97a75a2b3e759486 (diff) | |
download | chromium_src-81fc59f761888440ef190cc5c35a2a1d06986183.zip chromium_src-81fc59f761888440ef190cc5c35a2a1d06986183.tar.gz chromium_src-81fc59f761888440ef190cc5c35a2a1d06986183.tar.bz2 |
Add proper support for copy-constructed pp::Buffer_Dev's.
This requires refcounting Map() to make sure that Unmap() is called once per
underlying SharedMemory.
BUG=85629
TEST=trybots, ui_tests:*PPAPI.Buffer
Review URL: http://codereview.chromium.org/7146007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89044 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/ppapi/ppb_buffer_impl.cc')
-rw-r--r-- | webkit/plugins/ppapi/ppb_buffer_impl.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/webkit/plugins/ppapi/ppb_buffer_impl.cc b/webkit/plugins/ppapi/ppb_buffer_impl.cc index 5c248d6..b32c616 100644 --- a/webkit/plugins/ppapi/ppb_buffer_impl.cc +++ b/webkit/plugins/ppapi/ppb_buffer_impl.cc @@ -21,7 +21,7 @@ namespace webkit { namespace ppapi { PPB_Buffer_Impl::PPB_Buffer_Impl(PluginInstance* instance) - : Resource(instance), size_(0) { + : Resource(instance), size_(0), map_count_(0) { } PPB_Buffer_Impl::~PPB_Buffer_Impl() { @@ -71,13 +71,14 @@ PP_Bool PPB_Buffer_Impl::IsMapped() { void* PPB_Buffer_Impl::Map() { DCHECK(size_); DCHECK(shared_memory_.get()); - if (!shared_memory_->Map(size_)) - return NULL; + if (map_count_++ == 0) + shared_memory_->Map(size_); return shared_memory_->memory(); } void PPB_Buffer_Impl::Unmap() { - shared_memory_->Unmap(); + if (--map_count_ == 0) + shared_memory_->Unmap(); } int32_t PPB_Buffer_Impl::GetSharedMemory(int* shm_handle) { |