Index: mojo/system/message_in_transit.cc |
diff --git a/mojo/system/message_in_transit.cc b/mojo/system/message_in_transit.cc |
index 442cd7142df5a827e1595c1b2d04a43c0bf13fd0..c15d862d7b739a6bad72a8cf70a94342a74454fe 100644 |
--- a/mojo/system/message_in_transit.cc |
+++ b/mojo/system/message_in_transit.cc |
@@ -16,6 +16,28 @@ |
namespace mojo { |
namespace system { |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
+ MessageInTransit::kTypeMessagePipeEndpoint; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
+ MessageInTransit::kTypeMessagePipe; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
+ MessageInTransit::kTypeChannel; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
+ MessageInTransit::kSubtypeMessagePipeEndpointData; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
+ MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
+ MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
+ MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck; |
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::EndpointId |
+ MessageInTransit::kInvalidEndpointId; |
+STATIC_CONST_MEMBER_DEFINITION const size_t MessageInTransit::kMessageAlignment; |
+STATIC_CONST_MEMBER_DEFINITION const size_t |
+ MessageInTransit::kMaxSerializedDispatcherSize; |
+STATIC_CONST_MEMBER_DEFINITION const size_t |
+ MessageInTransit::kMaxSerializedDispatcherPlatformHandles; |
+ |
struct MessageInTransit::PrivateStructForCompileAsserts { |
// The size of |Header| must be a multiple of the alignment. |
COMPILE_ASSERT(sizeof(Header) % kMessageAlignment == 0, |
@@ -40,34 +62,13 @@ struct MessageInTransit::PrivateStructForCompileAsserts { |
sizeof_MessageInTransit_HandleTableEntry_invalid); |
}; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
- MessageInTransit::kTypeMessagePipeEndpoint; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
- MessageInTransit::kTypeMessagePipe; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type |
- MessageInTransit::kTypeChannel; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
- MessageInTransit::kSubtypeMessagePipeEndpointData; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
- MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
- MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype |
- MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck; |
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::EndpointId |
- MessageInTransit::kInvalidEndpointId; |
-STATIC_CONST_MEMBER_DEFINITION const size_t MessageInTransit::kMessageAlignment; |
-STATIC_CONST_MEMBER_DEFINITION const size_t |
- MessageInTransit::kMaxSerializedDispatcherSize; |
-STATIC_CONST_MEMBER_DEFINITION const size_t |
- MessageInTransit::kMaxSerializedDispatcherPlatformHandles; |
- |
// For each attached (Mojo) handle, there'll be a handle table entry and |
// serialized dispatcher data. |
// static |
const size_t MessageInTransit::kMaxSecondaryBufferSize = kMaxMessageNumHandles * |
(sizeof(HandleTableEntry) + kMaxSerializedDispatcherSize); |
+// static |
const size_t MessageInTransit::kMaxPlatformHandles = |
kMaxMessageNumHandles * kMaxSerializedDispatcherPlatformHandles; |
@@ -221,10 +222,14 @@ void MessageInTransit::SerializeAndCloseDispatchers(Channel* channel) { |
if (!num_handles()) |
return; |
- size_t handle_table_size = num_handles() * sizeof(HandleTableEntry); |
- // The size of the secondary buffer. We'll start with the size of the handle |
- // table, and add to it as we go along. |
- size_t size = handle_table_size; |
+ // The offset to the start of the (Mojo) handle table. |
+ // TODO(vtl): Add a header to the secondary buffer. |
+ const size_t handle_table_start_offset = 0; |
+ // The offset to the start of the serialized dispatcher data. |
+ const size_t serialized_dispatcher_start_offset = |
+ handle_table_start_offset + num_handles() * sizeof(HandleTableEntry); |
+ // The size of the secondary buffer we'll add to this as we go along). |
+ size_t size = serialized_dispatcher_start_offset; |
size_t num_platform_handles = 0; |
#if DCHECK_IS_ON |
std::vector<size_t> all_max_sizes(num_handles()); |
@@ -265,9 +270,9 @@ void MessageInTransit::SerializeAndCloseDispatchers(Channel* channel) { |
platform_handles_.reset(new std::vector<embedder::PlatformHandle>()); |
} |
- HandleTableEntry* handle_table = |
- static_cast<HandleTableEntry*>(secondary_buffer_); |
- size_t current_offset = handle_table_size; |
+ HandleTableEntry* handle_table = reinterpret_cast<HandleTableEntry*>( |
+ static_cast<char*>(secondary_buffer_) + handle_table_start_offset); |
+ size_t current_offset = serialized_dispatcher_start_offset; |
for (size_t i = 0; i < num_handles(); i++) { |
Dispatcher* dispatcher = (*dispatchers_)[i].get(); |
if (!dispatcher) { |