diff --git a/src/capture.rs b/src/capture.rs index f3367d9..f7f0fd3 100644 --- a/src/capture.rs +++ b/src/capture.rs @@ -182,7 +182,10 @@ async fn do_capture( /* create barriers for active clients */ for (handle, pos) in clients { - capture.create(handle, to_capture_pos(pos)).await?; + tokio::select! { + r = capture.create(handle, to_capture_pos(pos)) => r?, + _ = wait_for_termination(request_rx) => return Ok(()), + } } let res = do_capture_session(active, &mut capture, conn, event_tx, request_rx, service).await; diff --git a/src/emulation.rs b/src/emulation.rs index d1bc942..f55e74e 100644 --- a/src/emulation.rs +++ b/src/emulation.rs @@ -288,7 +288,10 @@ impl EmulationProxy { // create active handles for &handle in handles.values() { - emulation.create(handle).await; + tokio::select! { + _ = emulation.create(handle) => {}, + _ = wait_for_termination(request_rx) => return Ok(()), + } } let res = Self::do_emulation_session(&mut emulation, handles, next_id, request_rx).await;