From 64a1cbc775e4df581e9764b9eeba0ed239992e88 Mon Sep 17 00:00:00 2001 From: Manuel de Prada Corral <6536835+manueldeprada@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:24:16 +0200 Subject: [PATCH] fix(terminal): repeat retry screen instruction sending during stdin cache replay (#3372) --- zellij-server/src/route.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs index a08ae99eec..de85444c02 100644 --- a/zellij-server/src/route.rs +++ b/zellij-server/src/route.rs @@ -1,5 +1,7 @@ use std::collections::{BTreeMap, HashSet, VecDeque}; use std::sync::{Arc, RwLock}; +use std::thread; +use std::time::Duration; use crate::thread_bus::ThreadSenders; use crate::{ @@ -1222,13 +1224,17 @@ 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)?; + thread::sleep(Duration::from_millis(100)); + 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;