From f24f7152d3ab06a91a68936d18e17cbc43e67607 Mon Sep 17 00:00:00 2001 From: Alexander Bosu-Kellett Date: Thu, 18 Jul 2024 17:36:29 +0200 Subject: [PATCH] fix(terminal): repeat instruction sending on error (#3372) This ended up breaking sixel support as screen instructions such as pixel dimension detection response were unreliably replayed when the screen was not yet ready. --- zellij-server/src/route.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs index 3092310ad7..ff53ee3d2e 100644 --- a/zellij-server/src/route.rs +++ b/zellij-server/src/route.rs @@ -1180,13 +1180,16 @@ pub(crate) fn route_thread_main( } Ok(should_break) }; + let mut repeat_retries = VecDeque::new(); while let Some(instruction_to_retry) = retry_queue.pop_front() { log::warn!("Server ready, retrying sending instruction."); - let should_break = handle_instruction(instruction_to_retry, None)?; + let should_break = handle_instruction(instruction_to_retry, Some(&mut repeat_retries))?; if should_break { break 'route_loop; } } + // retry on loop around + retry_queue.append(&mut repeat_retries); let should_break = handle_instruction(instruction, Some(&mut retry_queue))?; if should_break { break 'route_loop;