Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Unified Diff: mojo/system/raw_shared_buffer.h

Issue 304233005: Mojo: Implement passing of shared buffers across processes on POSIX. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/system/dispatcher.cc ('k') | mojo/system/raw_shared_buffer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/system/raw_shared_buffer.h
diff --git a/mojo/system/raw_shared_buffer.h b/mojo/system/raw_shared_buffer.h
index 863584f2ad5346953ce08f56e4d34f4af8f72a33..d38acb841c6ece8e221c05d887edaca3ad611274 100644
--- a/mojo/system/raw_shared_buffer.h
+++ b/mojo/system/raw_shared_buffer.h
@@ -10,7 +10,6 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
#include "mojo/embedder/scoped_platform_handle.h"
#include "mojo/system/system_impl_export.h"
@@ -37,11 +36,14 @@ class RawSharedBufferMapping;
class MOJO_SYSTEM_IMPL_EXPORT RawSharedBuffer
: public base::RefCountedThreadSafe<RawSharedBuffer> {
public:
-
// Creates a shared buffer of size |num_bytes| bytes (initially zero-filled).
// |num_bytes| must be nonzero. Returns null on failure.
static RawSharedBuffer* Create(size_t num_bytes);
+ static RawSharedBuffer* CreateFromPlatformHandle(
+ size_t num_bytes,
+ embedder::ScopedPlatformHandle platform_handle);
+
// Maps (some) of the shared buffer into memory; [|offset|, |offset + length|]
// must be contained in [0, |num_bytes|], and |length| must be at least 1.
// Returns null on failure.
@@ -54,6 +56,15 @@ class MOJO_SYSTEM_IMPL_EXPORT RawSharedBuffer
// preflighted using |IsValidMap()|).
scoped_ptr<RawSharedBufferMapping> MapNoCheck(size_t offset, size_t length);
+ // Duplicates the underlying platform handle and passes it to the caller.
+ embedder::ScopedPlatformHandle DuplicatePlatformHandle();
+
+ // Passes the underlying platform handle to the caller. This should only be
+ // called if there's a unique reference to this object (owned by the caller).
+ // After calling this, this object should no longer be used, but should only
+ // be disposed of.
+ embedder::ScopedPlatformHandle PassPlatformHandle();
+
size_t num_bytes() const { return num_bytes_; }
private:
@@ -62,18 +73,24 @@ class MOJO_SYSTEM_IMPL_EXPORT RawSharedBuffer
explicit RawSharedBuffer(size_t num_bytes);
~RawSharedBuffer();
- // This is called by |Create()| before this object is given to anyone (hence
- // it doesn't need to take |lock_|).
- bool InitNoLock();
+ // Implemented in raw_shared_buffer_{posix,win}.cc:
+
+ // This is called by |Create()| before this object is given to anyone.
+ bool Init();
+
+ // This is like |Init()|, but for |CreateFromPlatformHandle()|. (Note: It
+ // should verify that |platform_handle| is an appropriate handle for the
+ // claimed |num_bytes_|.)
+ bool InitFromPlatformHandle(embedder::ScopedPlatformHandle platform_handle);
- // The platform-dependent part of |Map()|; doesn't check arguments. Called
- // under |lock_|.
- scoped_ptr<RawSharedBufferMapping> MapImplNoLock(size_t offset,
- size_t length);
+ // The platform-dependent part of |Map()|; doesn't check arguments.
+ scoped_ptr<RawSharedBufferMapping> MapImpl(size_t offset, size_t length);
const size_t num_bytes_;
- base::Lock lock_; // Protects |handle_|.
+ // This is set in |Init()|/|InitFromPlatformHandle()| and never modified
+ // (except by |PassPlatformHandle()|; see the comments above its declaration),
+ // hence does not need to be protected by a lock.
embedder::ScopedPlatformHandle handle_;
DISALLOW_COPY_AND_ASSIGN(RawSharedBuffer);
« no previous file with comments | « mojo/system/dispatcher.cc ('k') | mojo/system/raw_shared_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698