From bf209308d03e392303c307eb41bfced346934760 Mon Sep 17 00:00:00 2001 From: Logan Johnson Date: Thu, 17 Sep 2026 17:34:15 -0400 Subject: [PATCH] fix(acp): preserve connected response errors Only suppress response writes after an observed peer disconnect; keep other endpoint I/O failures visible. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@users.noreply.github.com> Signed-off-by: Logan Johnson --- crates/buzz-acp/src/isolated_turn.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/buzz-acp/src/isolated_turn.rs b/crates/buzz-acp/src/isolated_turn.rs index d4b63596d7..3a1e2fc86e 100644 --- a/crates/buzz-acp/src/isolated_turn.rs +++ b/crates/buzz-acp/src/isolated_turn.rs @@ -118,13 +118,13 @@ where let (cancel_tx, cancel_rx) = oneshot::channel(); let execution = execute(request, cancel_rx); tokio::pin!(execution); - let result = tokio::select! { - result = &mut execution => result, + let (result, disconnected) = tokio::select! { + result = &mut execution => (result, false), read = stream.read_u8() => { let _ = cancel_tx.send(()); let result = execution.await; tracing::debug!(?read, "isolated-turn client disconnected"); - result + (result, true) } }; let result = match result { @@ -136,9 +136,10 @@ where }, }; // Execution cleanup above is authoritative even when the peer is gone. - match write_frame(&mut stream, &result).await { - Err(error) if error.downcast_ref::().is_some() => Ok(()), - other => other, + if disconnected { + Ok(()) + } else { + write_frame(&mut stream, &result).await } }