@@ -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