fix potential unterminated emulation session

This commit is contained in:
Ferdinand Schober
2024-11-03 12:56:48 +01:00
parent 707cef154e
commit 4d835a5190

View File

@@ -291,11 +291,11 @@ impl EmulationProxy {
);
// create active handles
for &handle in handles.values() {
tokio::select! {
_ = emulation.create(handle) => {},
_ = wait_for_termination(request_rx) => return Ok(()),
}
if let Err(e) =
Self::create_clients(&mut emulation, handles.values().copied(), request_rx).await
{
emulation.terminate().await;
return Err(e);
}
let res = Self::do_emulation_session(&mut emulation, handles, next_id, request_rx).await;
@@ -304,6 +304,20 @@ impl EmulationProxy {
res
}
async fn create_clients(
emulation: &mut InputEmulation,
handles: impl Iterator<Item = EmulationHandle>,
request_rx: &mut Receiver<ProxyRequest>,
) -> Result<(), InputEmulationError> {
for handle in handles {
tokio::select! {
_ = emulation.create(handle) => {},
_ = wait_for_termination(request_rx) => return Ok(()),
}
}
Ok(())
}
async fn do_emulation_session(
emulation: &mut InputEmulation,
handles: &mut HashMap<SocketAddr, EmulationHandle>,