| Index: mojo/edk/system/message_in_transit.h
|
| diff --git a/mojo/edk/system/message_in_transit.h b/mojo/edk/system/message_in_transit.h
|
| index 2d5c04923373a6f0c1b8fbbee87bc311f984e1c8..f2ec0262b9fe7bdda18796bd8fb6ed9ae5b0d0b2 100644
|
| --- a/mojo/edk/system/message_in_transit.h
|
| +++ b/mojo/edk/system/message_in_transit.h
|
| @@ -15,6 +15,7 @@
|
| #include "mojo/edk/platform/aligned_alloc.h"
|
| #include "mojo/edk/system/channel_endpoint_id.h"
|
| #include "mojo/edk/system/dispatcher.h"
|
| +#include "mojo/edk/system/handle.h"
|
| #include "mojo/edk/system/memory.h"
|
| #include "mojo/public/cpp/system/macros.h"
|
|
|
| @@ -183,21 +184,23 @@ class MessageInTransit {
|
| size_t buffer_size,
|
| size_t* next_message_size);
|
|
|
| - // Makes this message "own" the given set of dispatchers. The dispatchers must
|
| - // not be referenced from anywhere else (in particular, not from the handle
|
| - // table), i.e., each dispatcher must have a reference count of 1. This
|
| - // message must not already have dispatchers.
|
| + // Makes this message "own" the given set of handles. Each handle's dispatcher
|
| + // must not be referenced from anywhere else (in particular, not from any
|
| + // handle in the handle table), i.e., the dispatcher must have a reference
|
| + // count of 1. This message must not already have handles.
|
| + void SetHandles(std::unique_ptr<HandleVector> handles);
|
| + // TODO(vtl): Delete this.
|
| void SetDispatchers(std::unique_ptr<DispatcherVector> dispatchers);
|
|
|
| // Sets the |TransportData| for this message. This should only be done when
|
| - // there are no dispatchers and no existing |TransportData|.
|
| + // there are no handles and no existing |TransportData|.
|
| void SetTransportData(std::unique_ptr<TransportData> transport_data);
|
|
|
| - // Serializes any dispatchers to the secondary buffer. This message must not
|
| + // Serializes any handles to the secondary buffer. This message must not
|
| // already have a secondary buffer (so this must only be called once). The
|
| // caller must ensure (e.g., by holding on to a reference) that |channel|
|
| // stays alive through the call.
|
| - void SerializeAndCloseDispatchers(Channel* channel);
|
| + void SerializeAndCloseHandles(Channel* channel);
|
|
|
| // Gets the main buffer and its size (in number of bytes), respectively.
|
| const void* main_buffer() const { return main_buffer_.get(); }
|
| @@ -229,15 +232,13 @@ class MessageInTransit {
|
| header()->destination_id = destination_id;
|
| }
|
|
|
| - // Gets the dispatchers attached to this message; this may return null if
|
| - // there are none. Note that the caller may mutate the set of dispatchers
|
| - // (e.g., take ownership of all the dispatchers, leaving the vector empty).
|
| - DispatcherVector* dispatchers() { return dispatchers_.get(); }
|
| + // Gets the handles attached to this message; this may return null if there
|
| + // are none. Note that the caller may mutate the set of handles (e.g., take
|
| + // ownership of all the handles, leaving the vector empty).
|
| + HandleVector* handles() { return handles_.get(); }
|
|
|
| - // Returns true if this message has dispatchers attached.
|
| - bool has_dispatchers() const {
|
| - return dispatchers_ && !dispatchers_->empty();
|
| - }
|
| + // Returns true if this message has handles attached.
|
| + bool has_handles() const { return handles_ && !handles_->empty(); }
|
|
|
| // Rounds |n| up to a multiple of |kMessageAlignment|.
|
| static inline size_t RoundUpMessageAlignment(size_t n) {
|
| @@ -254,8 +255,8 @@ class MessageInTransit {
|
| // Total size of the message, including the header, the message data
|
| // ("bytes") including padding (to make it a multiple of |kMessageAlignment|
|
| // bytes), and serialized handle information. Note that this may not be the
|
| - // correct value if dispatchers are attached but
|
| - // |SerializeAndCloseDispatchers()| has not been called.
|
| + // correct value if handles are attached but |SerializeAndCloseHandles()|
|
| + // has not been called.
|
| uint32_t total_size;
|
| Type type; // 2 bytes.
|
| Subtype subtype; // 2 bytes.
|
| @@ -280,11 +281,11 @@ class MessageInTransit {
|
|
|
| std::unique_ptr<TransportData> transport_data_; // May be null.
|
|
|
| - // Any dispatchers that may be attached to this message. These dispatchers
|
| - // should be "owned" by this message, i.e., have a ref count of exactly 1. (We
|
| - // allow a dispatcher entry to be null, in case it couldn't be duplicated for
|
| - // some reason.)
|
| - std::unique_ptr<DispatcherVector> dispatchers_;
|
| + // Any handles that may be attached to this message. These handles should be
|
| + // "owned" by this message, i.e., their dispatcher have a ref count of exactly
|
| + // 1. (We allow a handle entry to be "null"/invalid, in case it couldn't be
|
| + // duplicated for some reason.)
|
| + std::unique_ptr<HandleVector> handles_;
|
|
|
| MOJO_DISALLOW_COPY_AND_ASSIGN(MessageInTransit);
|
| };
|
|
|