OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/system/channel.h" | 5 #include "mojo/system/channel.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 // We need to deal with it outside the lock. | 67 // We need to deal with it outside the lock. |
68 std::swap(to_destroy, local_id_to_endpoint_map_); | 68 std::swap(to_destroy, local_id_to_endpoint_map_); |
69 } | 69 } |
70 | 70 |
71 size_t num_live = 0; | 71 size_t num_live = 0; |
72 size_t num_zombies = 0; | 72 size_t num_zombies = 0; |
73 for (IdToEndpointMap::iterator it = to_destroy.begin(); | 73 for (IdToEndpointMap::iterator it = to_destroy.begin(); |
74 it != to_destroy.end(); | 74 it != to_destroy.end(); |
75 ++it) { | 75 ++it) { |
76 if (it->second->state_ == ChannelEndpoint::STATE_NORMAL) { | 76 if (it->second->state_ == ChannelEndpoint::STATE_NORMAL) { |
77 it->second->message_pipe_->OnRemove(it->second->port_); | 77 it->second->message_pipe_->Close(it->second->port_); |
78 num_live++; | 78 num_live++; |
79 } else { | 79 } else { |
80 DCHECK(!it->second->message_pipe_.get()); | 80 DCHECK(!it->second->message_pipe_.get()); |
81 num_zombies++; | 81 num_zombies++; |
82 } | 82 } |
83 it->second->DetachFromChannel(); | 83 it->second->DetachFromChannel(); |
84 } | 84 } |
85 DVLOG_IF(2, num_live || num_zombies) << "Shut down Channel with " << num_live | 85 DVLOG_IF(2, num_live || num_zombies) << "Shut down Channel with " << num_live |
86 << " live endpoints and " << num_zombies | 86 << " live endpoints and " << num_zombies |
87 << " zombies"; | 87 << " zombies"; |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck, | 486 MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck, |
487 local_id, | 487 local_id, |
488 remote_id)) { | 488 remote_id)) { |
489 HandleLocalError(base::StringPrintf( | 489 HandleLocalError(base::StringPrintf( |
490 "Failed to send message to remove remote message pipe endpoint ack " | 490 "Failed to send message to remove remote message pipe endpoint ack " |
491 "(local ID %u, remote ID %u)", | 491 "(local ID %u, remote ID %u)", |
492 static_cast<unsigned>(local_id), | 492 static_cast<unsigned>(local_id), |
493 static_cast<unsigned>(remote_id))); | 493 static_cast<unsigned>(remote_id))); |
494 } | 494 } |
495 | 495 |
496 message_pipe->OnRemove(port); | 496 message_pipe->Close(port); |
497 | 497 |
498 return true; | 498 return true; |
499 } | 499 } |
500 | 500 |
501 bool Channel::SendControlMessage(MessageInTransit::Subtype subtype, | 501 bool Channel::SendControlMessage(MessageInTransit::Subtype subtype, |
502 MessageInTransit::EndpointId local_id, | 502 MessageInTransit::EndpointId local_id, |
503 MessageInTransit::EndpointId remote_id) { | 503 MessageInTransit::EndpointId remote_id) { |
504 DVLOG(2) << "Sending channel control message: subtype " << subtype | 504 DVLOG(2) << "Sending channel control message: subtype " << subtype |
505 << ", local ID " << local_id << ", remote ID " << remote_id; | 505 << ", local ID " << local_id << ", remote ID " << remote_id; |
506 scoped_ptr<MessageInTransit> message(new MessageInTransit( | 506 scoped_ptr<MessageInTransit> message(new MessageInTransit( |
(...skipping 13 matching lines...) Expand all Loading... |
520 // TODO(vtl): Is this how we really want to handle this? | 520 // TODO(vtl): Is this how we really want to handle this? |
521 // Sometimes we'll want to propagate the error back to the message pipe | 521 // Sometimes we'll want to propagate the error back to the message pipe |
522 // (endpoint), and notify it that the remote is (effectively) closed. | 522 // (endpoint), and notify it that the remote is (effectively) closed. |
523 // Sometimes we'll want to kill the channel (and notify all the endpoints that | 523 // Sometimes we'll want to kill the channel (and notify all the endpoints that |
524 // their remotes are dead. | 524 // their remotes are dead. |
525 LOG(WARNING) << error_message; | 525 LOG(WARNING) << error_message; |
526 } | 526 } |
527 | 527 |
528 } // namespace system | 528 } // namespace system |
529 } // namespace mojo | 529 } // namespace mojo |
OLD | NEW |