| Index: mojo/system/message_in_transit.cc
|
| diff --git a/mojo/system/message_in_transit.cc b/mojo/system/message_in_transit.cc
|
| index 89f1dad0777e2483db396551d183ae2ee6552d57..b7c536ebeb1e380d773e044450cc32cdca5bd895 100644
|
| --- a/mojo/system/message_in_transit.cc
|
| +++ b/mojo/system/message_in_transit.cc
|
| @@ -51,21 +51,27 @@ MessageInTransit* MessageInTransit::Create(Type type,
|
|
|
| const size_t data_size = num_bytes;
|
| const size_t size_with_header = sizeof(MessageInTransit) + data_size;
|
| - const size_t size_with_header_and_padding =
|
| - RoundUpMessageAlignment(size_with_header);
|
| + const size_t buffer_size = RoundUpMessageAlignment(size_with_header);
|
|
|
| - char* buffer = static_cast<char*>(
|
| - base::AlignedAlloc(size_with_header_and_padding, kMessageAlignment));
|
| + char* buffer = static_cast<char*>(base::AlignedAlloc(buffer_size,
|
| + kMessageAlignment));
|
| // The buffer consists of the header (a |MessageInTransit|, constructed using
|
| // a placement new), followed by the data, followed by padding (of zeros).
|
| MessageInTransit* rv = new (buffer) MessageInTransit(
|
| static_cast<uint32_t>(data_size), type, subtype, num_bytes, num_handles);
|
| memcpy(buffer + sizeof(MessageInTransit), bytes, num_bytes);
|
| - memset(buffer + size_with_header, 0,
|
| - size_with_header_and_padding - size_with_header);
|
| + memset(buffer + size_with_header, 0, buffer_size - size_with_header);
|
| return rv;
|
| }
|
|
|
| +MessageInTransit* MessageInTransit::Clone() const {
|
| + size_t buffer_size = main_buffer_size();
|
| + char* buffer = static_cast<char*>(base::AlignedAlloc(buffer_size,
|
| + kMessageAlignment));
|
| + memcpy(buffer, main_buffer(), buffer_size);
|
| + return reinterpret_cast<MessageInTransit*>(buffer);
|
| +}
|
| +
|
| void MessageInTransit::Destroy() {
|
| // No need to call the destructor, since we're POD.
|
| base::AlignedFree(this);
|
|
|