Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 433 MayAutoLock locker(&lock_); | 433 MayAutoLock locker(&lock_); |
| 434 do { | 434 do { |
| 435 if (next_interface_id_value_ >= kInterfaceIdNamespaceMask) | 435 if (next_interface_id_value_ >= kInterfaceIdNamespaceMask) |
| 436 next_interface_id_value_ = 1; | 436 next_interface_id_value_ = 1; |
| 437 id = next_interface_id_value_++; | 437 id = next_interface_id_value_++; |
| 438 if (set_interface_id_namespace_bit_) | 438 if (set_interface_id_namespace_bit_) |
| 439 id |= kInterfaceIdNamespaceMask; | 439 id |= kInterfaceIdNamespaceMask; |
| 440 } while (base::ContainsKey(endpoints_, id)); | 440 } while (base::ContainsKey(endpoints_, id)); |
| 441 | 441 |
| 442 InterfaceEndpoint* endpoint = new InterfaceEndpoint(this, id); | 442 InterfaceEndpoint* endpoint = new InterfaceEndpoint(this, id); |
| 443 endpoint->DisableSequenceConsistencyAssertions(); | |
| 443 endpoints_[id] = endpoint; | 444 endpoints_[id] = endpoint; |
| 444 if (encountered_error_) | 445 if (encountered_error_) |
| 445 UpdateEndpointStateMayRemove(endpoint, PEER_ENDPOINT_CLOSED); | 446 UpdateEndpointStateMayRemove(endpoint, PEER_ENDPOINT_CLOSED); |
| 446 endpoint->set_handle_created(); | 447 endpoint->set_handle_created(); |
| 447 } | 448 } |
| 448 | 449 |
| 449 if (!NotifyAssociation(&handle_to_send, id)) { | 450 if (!NotifyAssociation(&handle_to_send, id)) { |
| 450 // The peer handle of |handle_to_send|, which is supposed to join this | 451 // The peer handle of |handle_to_send|, which is supposed to join this |
| 451 // associated group, has been closed. | 452 // associated group, has been closed. |
| 452 { | 453 { |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 953 InterfaceId id, | 954 InterfaceId id, |
| 954 bool* inserted) { | 955 bool* inserted) { |
| 955 AssertLockAcquired(); | 956 AssertLockAcquired(); |
| 956 // Either |inserted| is nullptr or it points to a boolean initialized as | 957 // Either |inserted| is nullptr or it points to a boolean initialized as |
| 957 // false. | 958 // false. |
| 958 DCHECK(!inserted || !*inserted); | 959 DCHECK(!inserted || !*inserted); |
| 959 | 960 |
| 960 InterfaceEndpoint* endpoint = FindEndpoint(id); | 961 InterfaceEndpoint* endpoint = FindEndpoint(id); |
| 961 if (!endpoint) { | 962 if (!endpoint) { |
| 962 endpoint = new InterfaceEndpoint(this, id); | 963 endpoint = new InterfaceEndpoint(this, id); |
| 964 endpoint->DisableSequenceConsistencyAssertions(); | |
|
gab
2017/03/24 15:46:45
That seems like a very large hammer, can we use th
yzshen1
2017/03/24 16:58:09
I am the one who suggested that the check should b
| |
| 963 endpoints_[id] = endpoint; | 965 endpoints_[id] = endpoint; |
| 964 if (inserted) | 966 if (inserted) |
| 965 *inserted = true; | 967 *inserted = true; |
| 966 } | 968 } |
| 967 | 969 |
| 968 return endpoint; | 970 return endpoint; |
| 969 } | 971 } |
| 970 | 972 |
| 971 MultiplexRouter::InterfaceEndpoint* MultiplexRouter::FindEndpoint( | 973 MultiplexRouter::InterfaceEndpoint* MultiplexRouter::FindEndpoint( |
| 972 InterfaceId id) { | 974 InterfaceId id) { |
| 973 AssertLockAcquired(); | 975 AssertLockAcquired(); |
| 974 auto iter = endpoints_.find(id); | 976 auto iter = endpoints_.find(id); |
| 975 return iter != endpoints_.end() ? iter->second.get() : nullptr; | 977 return iter != endpoints_.end() ? iter->second.get() : nullptr; |
| 976 } | 978 } |
| 977 | 979 |
| 978 void MultiplexRouter::AssertLockAcquired() { | 980 void MultiplexRouter::AssertLockAcquired() { |
| 979 #if DCHECK_IS_ON() | 981 #if DCHECK_IS_ON() |
| 980 if (lock_) | 982 if (lock_) |
| 981 lock_->AssertAcquired(); | 983 lock_->AssertAcquired(); |
| 982 #endif | 984 #endif |
| 983 } | 985 } |
| 984 | 986 |
| 985 } // namespace internal | 987 } // namespace internal |
| 986 } // namespace mojo | 988 } // namespace mojo |
| OLD | NEW |