Chromium Code Reviews| 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..48588eb9eb17baaa044181d1fada9ac012ae01a2 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, this, buffer_size); |
|
yzshen1
2014/02/19 23:15:59
is it better to use main_buffer() here?
viettrungluu
2014/02/19 23:23:36
Done.
|
| + return reinterpret_cast<MessageInTransit*>(buffer); |
| +} |
| + |
| void MessageInTransit::Destroy() { |
| // No need to call the destructor, since we're POD. |
| base::AlignedFree(this); |