Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(409)

Side by Side Diff: mojo/public/cpp/bindings/lib/multiplex_router.cc

Issue 2025053002: Mojo C++ bindings: fix a DCHECK in multiplex_router.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/public/cpp/bindings/lib/multiplex_router.h" 5 #include "mojo/public/cpp/bindings/lib/multiplex_router.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 RaiseErrorInNonTestingMode(); 695 RaiseErrorInNonTestingMode();
696 return true; 696 return true;
697 } 697 }
698 698
699 InterfaceId id = message->interface_id(); 699 InterfaceId id = message->interface_id();
700 DCHECK(IsValidInterfaceId(id)); 700 DCHECK(IsValidInterfaceId(id));
701 701
702 bool inserted = false; 702 bool inserted = false;
703 InterfaceEndpoint* endpoint = FindOrInsertEndpoint(id, &inserted); 703 InterfaceEndpoint* endpoint = FindOrInsertEndpoint(id, &inserted);
704 if (inserted) { 704 if (inserted) {
705 DCHECK(!IsMasterInterfaceId(id));
706
707 // Currently, it is legitimate to receive messages for an endpoint 705 // Currently, it is legitimate to receive messages for an endpoint
708 // that is not registered. For example, the endpoint is transferred in 706 // that is not registered. For example, the endpoint is transferred in
709 // a message that is discarded. Once we add support to specify all 707 // a message that is discarded. Once we add support to specify all
710 // enclosing endpoints in message header, we should be able to remove 708 // enclosing endpoints in message header, we should be able to remove
711 // this. 709 // this.
712 UpdateEndpointStateMayRemove(endpoint, ENDPOINT_CLOSED); 710 UpdateEndpointStateMayRemove(endpoint, ENDPOINT_CLOSED);
713 711
714 control_message_proxy_.NotifyPeerEndpointClosed(id); 712 // It is also possible that this newly-inserted endpoint is the master
713 // endpoint. When the master InterfacePtr/Binding goes away, the message
714 // pipe is closed and we explicitly trigger a pipe connection error. The
715 // error updates all the endpoints, including the master endpoint, with
716 // PEER_ENDPOINT_CLOSED and removes the master endpoint from the
717 // registration. We continue to process remaining tasks in the queue, as
718 // long as there are refs keeping the router alive. If there are remaining
719 // messages for the master endpoint, we will get here.
720 if (!IsMasterInterfaceId(id))
721 control_message_proxy_.NotifyPeerEndpointClosed(id);
715 return true; 722 return true;
716 } 723 }
717 724
718 if (endpoint->closed()) 725 if (endpoint->closed())
719 return true; 726 return true;
720 727
721 if (!endpoint->client()) { 728 if (!endpoint->client()) {
722 // We need to wait until a client is attached in order to dispatch further 729 // We need to wait until a client is attached in order to dispatch further
723 // messages. 730 // messages.
724 return false; 731 return false;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 *inserted = true; 828 *inserted = true;
822 } else { 829 } else {
823 endpoint = iter->second.get(); 830 endpoint = iter->second.get();
824 } 831 }
825 832
826 return endpoint; 833 return endpoint;
827 } 834 }
828 835
829 } // namespace internal 836 } // namespace internal
830 } // namespace mojo 837 } // namespace mojo
OLDNEW
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698