Chromium Code Reviews| Index: mojo/public/cpp/bindings/lib/message.cc |
| diff --git a/mojo/public/cpp/bindings/lib/message.cc b/mojo/public/cpp/bindings/lib/message.cc |
| index 6b563e779aca7d196284726c0a899fe03ce2cdde..5581f7152191bfb06ceb3782cc59f82e8e5aa6c1 100644 |
| --- a/mojo/public/cpp/bindings/lib/message.cc |
| +++ b/mojo/public/cpp/bindings/lib/message.cc |
| @@ -13,54 +13,35 @@ |
| namespace mojo { |
| Message::Message() { |
| - Initialize(); |
| } |
| Message::~Message() { |
| - FreeDataAndCloseHandles(); |
| + CloseHandles(); |
| } |
| void Message::Reset() { |
| - FreeDataAndCloseHandles(); |
| + CloseHandles(); |
| handles_.clear(); |
| - Initialize(); |
| + buffer_.reset(); |
|
yzshen1
2015/12/16 00:29:27
Is there anyone calling Reset()?
If not, maybe it
|
| } |
| -void Message::AllocData(uint32_t num_bytes) { |
| - MOJO_DCHECK(!data_); |
| - data_num_bytes_ = num_bytes; |
| - data_ = static_cast<internal::MessageData*>(calloc(num_bytes, 1)); |
| -} |
| - |
| -void Message::AllocUninitializedData(uint32_t num_bytes) { |
| - MOJO_DCHECK(!data_); |
| - data_num_bytes_ = num_bytes; |
| - data_ = static_cast<internal::MessageData*>(malloc(num_bytes)); |
| +void Message::Initialize(size_t capacity, bool zero_initialized) { |
| + DCHECK(!buffer_); |
| + buffer_.reset(new internal::PickleBuffer(capacity, zero_initialized)); |
| } |
| void Message::MoveTo(Message* destination) { |
| MOJO_DCHECK(this != destination); |
| - destination->FreeDataAndCloseHandles(); |
| - |
| // No copy needed. |
| - destination->data_num_bytes_ = data_num_bytes_; |
| - destination->data_ = data_; |
| + std::swap(destination->buffer_, buffer_); |
| std::swap(destination->handles_, handles_); |
| - handles_.clear(); |
| - Initialize(); |
| -} |
| - |
| -void Message::Initialize() { |
| - data_num_bytes_ = 0; |
| - data_ = nullptr; |
| + Reset(); |
| } |
| -void Message::FreeDataAndCloseHandles() { |
| - free(data_); |
| - |
| +void Message::CloseHandles() { |
| for (std::vector<Handle>::iterator it = handles_.begin(); |
| it != handles_.end(); ++it) { |
| if (it->is_valid()) |
| @@ -84,16 +65,18 @@ MojoResult ReadAndDispatchMessage(MessagePipeHandle handle, |
| return rv; |
| Message message; |
| - message.AllocUninitializedData(num_bytes); |
| + message.Initialize(num_bytes, false /* zero_initialized */); |
| + |
| + void* mutable_data = message.buffer()->Allocate(num_bytes); |
| message.mutable_handles()->resize(num_handles); |
| rv = ReadMessageRaw( |
| handle, |
| - message.mutable_data(), |
| + mutable_data, |
| &num_bytes, |
| message.mutable_handles()->empty() |
| ? nullptr |
| - : reinterpret_cast<MojoHandle*>(&message.mutable_handles()->front()), |
| + : reinterpret_cast<MojoHandle*>(message.mutable_handles()->data()), |
| &num_handles, |
| MOJO_READ_MESSAGE_FLAG_NONE); |
| if (receiver && rv == MOJO_RESULT_OK) |