Skip to content

Commit ff85227

Browse files
kixelatedclaude
andauthored
fix(moq-ffi): unblock deadlocking dynamic_track_request tests (#1712)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 203b3fe commit ff85227

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

rs/moq-ffi/src/test.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,15 @@ async fn dynamic_track_request() {
7676
let broadcast = MoqBroadcastProducer::new().unwrap();
7777
let dynamic = broadcast.dynamic().unwrap();
7878
let consumer = broadcast.consume().unwrap();
79-
let track_consumer = consumer.subscribe_track("events".into()).await.unwrap();
8079

81-
let track = tokio::time::timeout(TIMEOUT, dynamic.requested_track())
82-
.await
83-
.expect("timed out waiting for requested track")
84-
.unwrap();
80+
// subscribe_track stays pending until the dynamic producer accepts the request
81+
// via requested_track(), so drive both sides concurrently to avoid a deadlock.
82+
let (track_consumer, track) = tokio::join!(
83+
consumer.subscribe_track("events".into()),
84+
tokio::time::timeout(TIMEOUT, dynamic.requested_track()),
85+
);
86+
let track_consumer = track_consumer.unwrap();
87+
let track = track.expect("timed out waiting for requested track").unwrap();
8588

8689
assert_eq!(track.name().unwrap(), "events");
8790

@@ -103,12 +106,15 @@ async fn dynamic_track_request_can_abort() {
103106
let broadcast = MoqBroadcastProducer::new().unwrap();
104107
let dynamic = broadcast.dynamic().unwrap();
105108
let consumer = broadcast.consume().unwrap();
106-
let _track_consumer = consumer.subscribe_track("unknown".into()).await.unwrap();
107109

108-
let track = tokio::time::timeout(TIMEOUT, dynamic.requested_track())
109-
.await
110-
.expect("timed out waiting for requested track")
111-
.unwrap();
110+
// subscribe_track stays pending until the dynamic producer accepts the request
111+
// via requested_track(), so drive both sides concurrently to avoid a deadlock.
112+
let (track_consumer, track) = tokio::join!(
113+
consumer.subscribe_track("unknown".into()),
114+
tokio::time::timeout(TIMEOUT, dynamic.requested_track()),
115+
);
116+
let _track_consumer = track_consumer.unwrap();
117+
let track = track.expect("timed out waiting for requested track").unwrap();
112118

113119
track.abort(404).unwrap();
114120
assert!(matches!(track.name(), Err(MoqError::Closed)));

0 commit comments

Comments
 (0)