summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/ppapi/ppb_buffer_impl.cc
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-14 19:28:41 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-14 19:28:41 +0000
commit81fc59f761888440ef190cc5c35a2a1d06986183 (patch)
treeefefe7e18d0caa39f2fb264e1f743f0a19bd951e /webkit/plugins/ppapi/ppb_buffer_impl.cc
parent790e6bed92413c0e8cafb42a97a75a2b3e759486 (diff)
downloadchromium_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.cc9
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) {