From 6dcadf2867a55d4b3b7425689f5ab4d20100a2c0 Mon Sep 17 00:00:00 2001 From: Floris Bruynooghe Date: Wed, 12 Nov 2025 17:12:42 +0100 Subject: [PATCH] Fix: only consider a path available if it has CIDs (#173) Since when we locally abandon a path we retire the CIDs for it, we can then no longer send on it. We need to take this into account for deciding which paths we want to send something on. We do the CID check rather than just check of the path is in our abandoned paths, since that is the check which is used lower down in the loop as well. I think this is essentially the same state. Maybe we could have done without the explicit set of abandoned paths as separate state. I'm not sure. --- quinn-proto/src/connection/mod.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/quinn-proto/src/connection/mod.rs b/quinn-proto/src/connection/mod.rs index 31942cca4..3cd21df4d 100644 --- a/quinn-proto/src/connection/mod.rs +++ b/quinn-proto/src/connection/mod.rs @@ -911,10 +911,9 @@ impl Connection { // If there is any available path we only want to send frames to any backup path // that must be sent on that backup path exclusively. - let have_available_path = self - .paths - .values() - .any(|path| path.data.local_status() == PathStatus::Available); + let have_available_path = self.paths.iter().any(|(id, path)| { + path.data.local_status() == PathStatus::Available && self.rem_cids.contains_key(id) + }); // Setup for the first path_id let mut transmit = TransmitBuf::new(