aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-09-02 10:21:09 +0200
committerGitHub <noreply@github.com>2022-09-02 10:21:09 +0200
commitb17f73bf08ce7fb66e2f708e06c47eceba71e137 (patch)
tree8ac681f2230e5166605d93192c1198716126f3b6
parentdocs(changelog): bracketed paste fix (diff)
downloadsl0ppij-b17f73bf08ce7fb66e2f708e06c47eceba71e137.tar.gz
sl0ppij-b17f73bf08ce7fb66e2f708e06c47eceba71e137.tar.xz
sl0ppij-b17f73bf08ce7fb66e2f708e06c47eceba71e137.zip
fix(router): startup race (#1706)
* fix(router): retry messages when server is not ready for all startup signals * style(fmt): rustfmt
-rw-r--r--zellij-server/src/route.rs54
1 files changed, 26 insertions, 28 deletions
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index 92b8f9c9..e1acbe1b 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -474,6 +474,7 @@ fn route_action(
should_break
}
+// this should only be used for one-off startup instructions
macro_rules! send_to_screen_or_retry_queue {
($rlocked_sessions:expr, $message:expr, $instruction: expr, $retry_queue:expr) => {{
match $rlocked_sessions.as_ref() {
@@ -547,7 +548,6 @@ pub(crate) fn route_thread_main(
.unwrap();
},
ClientToServerMsg::TerminalPixelDimensions(pixel_dimensions) => {
- // this is experimental, please be cautious implementing this elsewhere
send_to_screen_or_retry_queue!(
rlocked_sessions,
ScreenInstruction::TerminalPixelDimensions(pixel_dimensions),
@@ -555,35 +555,33 @@ pub(crate) fn route_thread_main(
retry_queue
);
},
- ClientToServerMsg::BackgroundColor(background_color_instruction) => {
- rlocked_sessions
- .as_ref()
- .unwrap()
- .senders
- .send_to_screen(ScreenInstruction::TerminalBackgroundColor(
- background_color_instruction,
- ))
- .unwrap();
+ ClientToServerMsg::BackgroundColor(ref background_color_instruction) => {
+ send_to_screen_or_retry_queue!(
+ rlocked_sessions,
+ ScreenInstruction::TerminalBackgroundColor(
+ background_color_instruction.clone()
+ ),
+ instruction,
+ retry_queue
+ );
},
- ClientToServerMsg::ForegroundColor(foreground_color_instruction) => {
- rlocked_sessions
- .as_ref()
- .unwrap()
- .senders
- .send_to_screen(ScreenInstruction::TerminalForegroundColor(
- foreground_color_instruction,
- ))
- .unwrap();
+ ClientToServerMsg::ForegroundColor(ref foreground_color_instruction) => {
+ send_to_screen_or_retry_queue!(
+ rlocked_sessions,
+ ScreenInstruction::TerminalForegroundColor(
+ foreground_color_instruction.clone()
+ ),
+ instruction,
+ retry_queue
+ );
},
- ClientToServerMsg::ColorRegisters(color_registers) => {
- rlocked_sessions
- .as_ref()
- .unwrap()
- .senders
- .send_to_screen(ScreenInstruction::TerminalColorRegisters(
- color_registers,
- ))
- .unwrap();
+ ClientToServerMsg::ColorRegisters(ref color_registers) => {
+ send_to_screen_or_retry_queue!(
+ rlocked_sessions,
+ ScreenInstruction::TerminalColorRegisters(color_registers.clone()),
+ instruction,
+ retry_queue
+ );
},
ClientToServerMsg::NewClient(
client_attributes,