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

Unified Diff: mojo/edk/system/shared_buffer_dispatcher.h

Issue 1585493002: [mojo] Ports EDK (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
Index: mojo/edk/system/shared_buffer_dispatcher.h
diff --git a/mojo/edk/system/shared_buffer_dispatcher.h b/mojo/edk/system/shared_buffer_dispatcher.h
index 079ee7680176f61cc7ba5358b10f09ce0b9ef9c5..e8b6420c0d3bb00936dbb6a0bf495d1086d0a17e 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.h
+++ b/mojo/edk/system/shared_buffer_dispatcher.h
@@ -10,21 +10,19 @@
#include <utility>
+#include "base/macros.h"
+#include "mojo/edk/embedder/platform_handle_vector.h"
#include "mojo/edk/embedder/platform_shared_buffer.h"
-#include "mojo/edk/system/simple_dispatcher.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
+#include "mojo/edk/system/dispatcher.h"
#include "mojo/edk/system/system_impl_export.h"
-#include "mojo/public/cpp/system/macros.h"
namespace mojo {
namespace edk {
class PlatformSupport;
-// TODO(vtl): We derive from SimpleDispatcher, even though we don't currently
-// have anything that's waitable. I want to add a "transferrable" wait flag
-// (which would entail overriding |GetHandleSignalsStateImplNoLock()|, etc.).
-class MOJO_SYSTEM_IMPL_EXPORT SharedBufferDispatcher final
- : public SimpleDispatcher {
+class MOJO_SYSTEM_IMPL_EXPORT SharedBufferDispatcher final : public Dispatcher {
public:
// The default options to use for |MojoCreateSharedBuffer()|. (Real uses
// should obtain this via |ValidateCreateOptions()| with a null |in_options|;
@@ -50,15 +48,35 @@ class MOJO_SYSTEM_IMPL_EXPORT SharedBufferDispatcher final
uint64_t num_bytes,
scoped_refptr<SharedBufferDispatcher>* result);
- // |Dispatcher| public methods:
- Type GetType() const override;
-
- // The "opposite" of |SerializeAndClose()|. (Typically this is called by
- // |Dispatcher::Deserialize()|.)
+ // The "opposite" of SerializeAndClose(). Called by Dispatcher::Deserialize().
static scoped_refptr<SharedBufferDispatcher> Deserialize(
- const void* source,
- size_t size,
- PlatformHandleVector* platform_handles);
+ const void* bytes,
+ size_t num_bytes,
+ const ports::PortName* ports,
+ size_t num_ports,
+ PlatformHandle* platform_handles,
+ size_t num_platform_handles);
+
+ // Dispatcher:
+ Type GetType() const override;
+ MojoResult Close() override;
+ MojoResult DuplicateBufferHandle(
+ const MojoDuplicateBufferHandleOptions* options,
+ scoped_refptr<Dispatcher>* new_dispatcher) override;
+ MojoResult MapBuffer(
+ uint64_t offset,
+ uint64_t num_bytes,
+ MojoMapBufferFlags flags,
+ scoped_ptr<PlatformSharedBufferMapping>* mapping) override;
+ void StartSerialize(uint32_t* num_bytes,
+ uint32_t* num_ports,
+ uint32_t* num_platform_handles) override;
+ bool EndSerialize(void* destination,
+ ports::PortName* ports,
+ PlatformHandle* handles) override;
+ bool BeginTransit() override;
+ void CompleteTransitAndClose() override;
+ void CancelTransit() override;
private:
static scoped_refptr<SharedBufferDispatcher> CreateInternal(
@@ -80,28 +98,18 @@ class MOJO_SYSTEM_IMPL_EXPORT SharedBufferDispatcher final
const MojoDuplicateBufferHandleOptions* in_options,
MojoDuplicateBufferHandleOptions* out_options);
- // |Dispatcher| protected methods:
- void CloseImplNoLock() override;
- scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock()
- override;
- MojoResult DuplicateBufferHandleImplNoLock(
- const MojoDuplicateBufferHandleOptions* options,
- scoped_refptr<Dispatcher>* new_dispatcher) override;
- MojoResult MapBufferImplNoLock(
- uint64_t offset,
- uint64_t num_bytes,
- MojoMapBufferFlags flags,
- scoped_ptr<PlatformSharedBufferMapping>* mapping) override;
- void StartSerializeImplNoLock(size_t* max_size,
- size_t* max_platform_handles) override;
- bool EndSerializeAndCloseImplNoLock(
- void* destination,
- size_t* actual_size,
- PlatformHandleVector* platform_handles) override;
+ // Guards access to |shared_buffer_|.
+ base::Lock lock_;
+
+ bool in_transit_ = false;
+
+ // We keep a copy of the buffer's platform handle during transit so we can
+ // close it if something goes wrong.
+ ScopedPlatformHandle handle_for_transit_;
Anand Mistry (off Chromium) 2016/01/28 02:26:25 Instead of keeping track, why not just pass owners
scoped_refptr<PlatformSharedBuffer> shared_buffer_;
- MOJO_DISALLOW_COPY_AND_ASSIGN(SharedBufferDispatcher);
+ DISALLOW_COPY_AND_ASSIGN(SharedBufferDispatcher);
};
} // namespace edk

Powered by Google App Engine
This is Rietveld 408576698