Index: mojo/system/raw_shared_buffer.cc |
diff --git a/mojo/system/raw_shared_buffer.cc b/mojo/system/raw_shared_buffer.cc |
index fb67cca71a77e8cfb3ddee8f13c7c3fbc50a45ec..e6e3ebce2390eb7525da0c6c59b7cd53085818c4 100644 |
--- a/mojo/system/raw_shared_buffer.cc |
+++ b/mojo/system/raw_shared_buffer.cc |
@@ -5,6 +5,7 @@ |
#include "mojo/system/raw_shared_buffer.h" |
#include "base/logging.h" |
+#include "mojo/embedder/platform_handle_utils.h" |
namespace mojo { |
namespace system { |
@@ -14,9 +15,28 @@ RawSharedBuffer* RawSharedBuffer::Create(size_t num_bytes) { |
DCHECK_GT(num_bytes, 0u); |
RawSharedBuffer* rv = new RawSharedBuffer(num_bytes); |
- // No need to take the lock since we haven't given the object to anyone yet. |
- if (!rv->InitNoLock()) |
+ if (!rv->Init()) { |
+ // We can't just delete it directly, due to the "in destructor" (debug) |
+ // check. |
+ scoped_refptr<RawSharedBuffer> deleter(rv); |
return NULL; |
+ } |
+ |
+ return rv; |
+} |
+ |
+RawSharedBuffer* RawSharedBuffer::CreateFromPlatformHandle( |
+ size_t num_bytes, |
+ embedder::ScopedPlatformHandle platform_handle) { |
+ DCHECK_GT(num_bytes, 0u); |
+ |
+ RawSharedBuffer* rv = new RawSharedBuffer(num_bytes); |
+ if (!rv->InitFromPlatformHandle(platform_handle.Pass())) { |
+ // We can't just delete it directly, due to the "in destructor" (debug) |
+ // check. |
+ scoped_refptr<RawSharedBuffer> deleter(rv); |
+ return NULL; |
+ } |
return rv; |
} |
@@ -44,9 +64,16 @@ bool RawSharedBuffer::IsValidMap(size_t offset, size_t length) { |
scoped_ptr<RawSharedBufferMapping> RawSharedBuffer::MapNoCheck(size_t offset, |
size_t length) { |
DCHECK(IsValidMap(offset, length)); |
+ return MapImpl(offset, length); |
+} |
+ |
+embedder::ScopedPlatformHandle RawSharedBuffer::DuplicatePlatformHandle() { |
+ return embedder::DuplicatePlatformHandle(handle_.get()); |
+} |
- base::AutoLock locker(lock_); |
- return MapImplNoLock(offset, length); |
+embedder::ScopedPlatformHandle RawSharedBuffer::PassPlatformHandle() { |
+ DCHECK(HasOneRef()); |
+ return handle_.Pass(); |
} |
RawSharedBuffer::RawSharedBuffer(size_t num_bytes) : num_bytes_(num_bytes) { |