Skip to content

Commit 77392fd

Browse files
committed
Bug 1879197 - Part 10: Ensure closure events for DestroyAllPortsWithPeer handles multiple local port corner case, r=ipc-reviewers,mccr8
This fixes a potential issue identified by :mccr8 in the review for D201111 by supporting multiple closure events being dispatched. Differential Revision: https://phabricator.services.mozilla.com/D201649
1 parent 46d5fdb commit 77392fd

File tree

1 file changed

+8
-9
lines changed
  • ipc/chromium/src/mojo/core/ports

1 file changed

+8
-9
lines changed

ipc/chromium/src/mojo/core/ports/node.cc

+8-9
Original file line numberDiff line numberDiff line change
@@ -1856,9 +1856,7 @@ void Node::DestroyAllPortsWithPeer(const NodeName& node_name,
18561856
std::vector<PortRef> ports_to_notify;
18571857
std::vector<PortName> dead_proxies_to_broadcast;
18581858
std::vector<mozilla::UniquePtr<UserMessageEvent>> undelivered_messages;
1859-
1860-
ScopedEvent closure_event;
1861-
NodeName closure_event_target_node;
1859+
std::vector<std::pair<NodeName, ScopedEvent>> closure_events;
18621860

18631861
{
18641862
PortLocker::AssertNoPortsLockedOnCurrentThread();
@@ -1900,11 +1898,12 @@ void Node::DestroyAllPortsWithPeer(const NodeName& node_name,
19001898
if (port_name != kInvalidPortName) {
19011899
// If this is a targeted observe dead proxy event, send out an
19021900
// ObserveClosure to acknowledge it.
1903-
closure_event_target_node = port->peer_node_name;
1904-
closure_event = mozilla::MakeUnique<ObserveClosureEvent>(
1905-
port->peer_port_name, local_port_ref.name(),
1906-
port->next_control_sequence_num_to_send++,
1907-
port->last_sequence_num_to_receive);
1901+
closure_events.push_back(
1902+
std::pair{port->peer_node_name,
1903+
mozilla::MakeUnique<ObserveClosureEvent>(
1904+
port->peer_port_name, local_port_ref.name(),
1905+
port->next_control_sequence_num_to_send++,
1906+
port->last_sequence_num_to_receive)});
19081907
}
19091908

19101909
if (!port->peer_closed) {
@@ -1939,7 +1938,7 @@ void Node::DestroyAllPortsWithPeer(const NodeName& node_name,
19391938
}
19401939
}
19411940

1942-
if (closure_event) {
1941+
for (auto& [closure_event_target_node, closure_event] : closure_events) {
19431942
delegate_->ForwardEvent(closure_event_target_node,
19441943
std::move(closure_event));
19451944
}

0 commit comments

Comments
 (0)