| Index: mojo/edk/system/message_in_transit.cc
|
| diff --git a/mojo/edk/system/message_in_transit.cc b/mojo/edk/system/message_in_transit.cc
|
| index 26e9252826a863f00da3066109888fa54367fc9f..4dbcf7d7dd5837012b36aaaea7dfb50e0e8afc9d 100644
|
| --- a/mojo/edk/system/message_in_transit.cc
|
| +++ b/mojo/edk/system/message_in_transit.cc
|
| @@ -109,13 +109,13 @@ MessageInTransit::MessageInTransit(const View& message_view)
|
| }
|
|
|
| MessageInTransit::~MessageInTransit() {
|
| - if (dispatchers_) {
|
| - for (size_t i = 0; i < dispatchers_->size(); i++) {
|
| - if (!(*dispatchers_)[i])
|
| + if (handles_) {
|
| + for (size_t i = 0; i < handles_->size(); i++) {
|
| + if (!handles_->at(i))
|
| continue;
|
|
|
| - (*dispatchers_)[i]->AssertHasOneRef();
|
| - (*dispatchers_)[i]->Close();
|
| + handles_->at(i).dispatcher->AssertHasOneRef();
|
| + handles_->at(i).dispatcher->Close();
|
| }
|
| }
|
| }
|
| @@ -141,39 +141,51 @@ bool MessageInTransit::GetNextMessageSize(const void* buffer,
|
| return true;
|
| }
|
|
|
| -void MessageInTransit::SetDispatchers(
|
| - std::unique_ptr<DispatcherVector> dispatchers) {
|
| - DCHECK(dispatchers);
|
| - DCHECK(!dispatchers_);
|
| +void MessageInTransit::SetHandles(std::unique_ptr<HandleVector> handles) {
|
| + DCHECK(handles);
|
| + DCHECK(!handles_);
|
| DCHECK(!transport_data_);
|
|
|
| - dispatchers_ = std::move(dispatchers);
|
| + handles_ = std::move(handles);
|
| #ifndef NDEBUG
|
| - for (size_t i = 0; i < dispatchers_->size(); i++) {
|
| - if ((*dispatchers_)[i])
|
| - (*dispatchers_)[i]->AssertHasOneRef();
|
| + for (size_t i = 0; i < handles_->size(); i++) {
|
| + if (handles_->at(i))
|
| + handles_->at(i).dispatcher->AssertHasOneRef();
|
| }
|
| #endif
|
| }
|
|
|
| +void MessageInTransit::SetDispatchers(
|
| + std::unique_ptr<DispatcherVector> dispatchers) {
|
| + DCHECK(dispatchers);
|
| +
|
| + std::unique_ptr<HandleVector> handles(new HandleVector());
|
| + handles->reserve(dispatchers->size());
|
| + for (size_t i = 0; i < dispatchers->size(); i++) {
|
| + handles->push_back(
|
| + Handle(std::move(dispatchers->at(i)), MOJO_HANDLE_RIGHT_NONE));
|
| + }
|
| + SetHandles(std::move(handles));
|
| +}
|
| +
|
| void MessageInTransit::SetTransportData(
|
| std::unique_ptr<TransportData> transport_data) {
|
| DCHECK(transport_data);
|
| DCHECK(!transport_data_);
|
| - DCHECK(!dispatchers_);
|
| + DCHECK(!handles_);
|
|
|
| transport_data_ = std::move(transport_data);
|
| UpdateTotalSize();
|
| }
|
|
|
| -void MessageInTransit::SerializeAndCloseDispatchers(Channel* channel) {
|
| +void MessageInTransit::SerializeAndCloseHandles(Channel* channel) {
|
| DCHECK(channel);
|
| DCHECK(!transport_data_);
|
|
|
| - if (!dispatchers_ || !dispatchers_->size())
|
| + if (!handles_ || !handles_->size())
|
| return;
|
|
|
| - transport_data_.reset(new TransportData(std::move(dispatchers_), channel));
|
| + transport_data_.reset(new TransportData(std::move(handles_), channel));
|
|
|
| // Update the sizes in the message header.
|
| UpdateTotalSize();
|
| @@ -191,8 +203,8 @@ void MessageInTransit::ConstructorHelper(Type type,
|
| header()->destination_id = ChannelEndpointId();
|
| header()->num_bytes = num_bytes;
|
| header()->unused = 0;
|
| - // Note: If dispatchers are subsequently attached, then |total_size| will have
|
| - // to be adjusted.
|
| + // Note: If handles are subsequently attached, then |total_size| will have to
|
| + // be adjusted.
|
| UpdateTotalSize();
|
| }
|
|
|
|
|