Skip to content

Commit d358ded

Browse files
committed
fix(vz): scope TURN cleanup to launch ownership
1 parent 51e37bd commit d358ded

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

elastos/crates/elastos-vz/src/bin/browser-vz-engine-supervisor.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,12 @@ impl VzLaunchOwner {
317317
};
318318
let turn_cleanup =
319319
std::mem::replace(&mut self.turn_cleanup, TurnCleanupEvidence::Indeterminate);
320+
// Port availability is evidence only when this launch may have started TURN.
321+
// A foreign listener cannot create a cleanup obligation for this owner.
322+
let probe_turn_ports = matches!(
323+
&turn_cleanup,
324+
TurnCleanupEvidence::Owned(_) | TurnCleanupEvidence::Indeterminate
325+
);
320326
let turn_child_absent = match turn_cleanup {
321327
TurnCleanupEvidence::Owned(mut turn) => turn.terminate_and_reap(),
322328
TurnCleanupEvidence::AbsenceProved => true,
@@ -336,8 +342,14 @@ impl VzLaunchOwner {
336342
.vm_id
337343
.as_str()
338344
.is_some_and(|vm_id| remove_owned_vm_state(&self.paths, vm_id, vm_absent));
339-
let turn_listener_absent = turn_listener_port_absent(&self.transport);
340-
let turn_relay_ports_absent = turn_relay_ports_absent(&self.transport);
345+
let (turn_listener_absent, turn_relay_ports_absent) = if probe_turn_ports {
346+
(
347+
turn_listener_port_absent(&self.transport),
348+
turn_relay_ports_absent(&self.transport),
349+
)
350+
} else {
351+
(true, true)
352+
};
341353
let child_absent = turn_child_absent
342354
&& control_proxy_absent
343355
&& ordinary_stream_bridge_absent
@@ -3838,6 +3850,9 @@ mod tests {
38383850
async fn post_effect_failure_emits_exact_terminal_cleanup() {
38393851
let mut transport = transport_fixture('f');
38403852
transport.authority["turn"]["relay_host"] = json!("127.0.0.1");
3853+
let foreign_turn_listener = std::net::TcpListener::bind(("127.0.0.1", 0)).unwrap();
3854+
transport.authority["turn"]["listen_port"] =
3855+
json!(foreign_turn_listener.local_addr().unwrap().port());
38413856
transport
38423857
.authority
38433858
.as_object_mut()
@@ -3880,8 +3895,10 @@ mod tests {
38803895
assert_eq!(settlement["state"], "terminal_post_effect_cleanup");
38813896
assert_eq!(settlement["effects"]["session_directory"], true);
38823897
assert_eq!(settlement["effects"]["control_socket"], true);
3898+
assert_eq!(settlement["effects"]["turn_process"], false);
38833899
assert_eq!(settlement["absence"]["session_directory_absent"], true);
38843900
assert_eq!(settlement["absence"]["control_socket_absent"], true);
3901+
assert_eq!(settlement["absence"]["turn_listener_absent"], true);
38853902
assert_eq!(
38863903
settlement["binding_hash"],
38873904
launch["transport_authority"]["binding_hash"]

0 commit comments

Comments
 (0)