aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2026-01-29 13:35:24 +0100
committerGitHub <noreply@github.com>2026-01-29 13:35:24 +0100
commit82178222a2bc0cef9c8121d6dde316b5ef8986ab (patch)
tree3423c7f396fced7fddc5a7ef34c384db5b209e9a
parentAllow saving current session for resurrection on demand (#4654) (diff)
downloadsl0ppij-82178222a2bc0cef9c8121d6dde316b5ef8986ab.tar.gz
sl0ppij-82178222a2bc0cef9c8121d6dde316b5ef8986ab.tar.xz
sl0ppij-82178222a2bc0cef9c8121d6dde316b5ef8986ab.zip
Handle errors in route loop (#4655)
* handle errors in route thread * fix session-manager deadlock on startup * rustfmt * add pr
-rw-r--r--CHANGELOG.md1
-rw-r--r--default-plugins/session-manager/src/main.rs7
-rw-r--r--zellij-server/src/plugins/zellij_exports.rs2
-rw-r--r--zellij-server/src/route.rs30
4 files changed, 25 insertions, 15 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 67be0769..b4c1d6fe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* fix: restore focused tab position on reattaching to a detached session (https://github.com/zellij-org/zellij/pull/4115)
* fix: session creation time (all session created 0s ago bug) on musl targets (https://github.com/zellij-org/zellij/pull/4645)
* feat: allow explicitly saving current session for resurrection (rather than waiting on the resurrection interval) (https://github.com/zellij-org/zellij/pull/4654)
+* fix: proper error handling in route (https://github.com/zellij-org/zellij/pull/4655)
## [0.43.1] - 2025-08-08
diff --git a/default-plugins/session-manager/src/main.rs b/default-plugins/session-manager/src/main.rs
index 1a76fdb9..85b120e7 100644
--- a/default-plugins/session-manager/src/main.rs
+++ b/default-plugins/session-manager/src/main.rs
@@ -62,10 +62,9 @@ impl ZellijPlugin for State {
self.active_screen = ActiveScreen::NewSession;
}
self.new_session_info.is_welcome_screen = self.is_welcome_screen;
-
- self.current_session_last_saved_time = current_session_last_saved_time();
- set_timeout(1.0);
-
+ if !self.is_welcome_screen {
+ set_timeout(0.1); // for the current_session_last_saved_time polling
+ }
subscribe(&[
EventType::ModeUpdate,
EventType::SessionUpdate,
diff --git a/zellij-server/src/plugins/zellij_exports.rs b/zellij-server/src/plugins/zellij_exports.rs
index 184936bd..01a1738e 100644
--- a/zellij-server/src/plugins/zellij_exports.rs
+++ b/zellij-server/src/plugins/zellij_exports.rs
@@ -2608,7 +2608,7 @@ fn current_session_last_saved_time(env: &PluginEnv) {
let saved_timestamp_millis = if send_result.is_ok() {
response_rx
- .recv_timeout(std::time::Duration::from_secs(5))
+ .recv_timeout(std::time::Duration::from_secs(1))
.ok()
.flatten()
} else {
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index 7ab11dc0..210306f7 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -1749,7 +1749,7 @@ pub(crate) fn route_thread_main(
cli_client_id: None,
});
- if route_action(
+ match route_action(
action,
client_id,
None,
@@ -1763,10 +1763,15 @@ pub(crate) fn route_thread_main(
keybinds.clone(),
client_input_mode,
Some(os_input.clone()),
- )?
- .0
- {
- should_break = true;
+ ) {
+ Ok(route_action_should_break) => {
+ if route_action_should_break.0 {
+ should_break = true;
+ }
+ },
+ Err(e) => {
+ log::error!("{}", e);
+ },
}
}
}
@@ -1839,7 +1844,7 @@ pub(crate) fn route_thread_main(
client_keybinds,
)) = session_data_assets
{
- if route_action(
+ match route_action(
action,
client_id,
Some(cli_client_id),
@@ -1853,10 +1858,15 @@ pub(crate) fn route_thread_main(
client_keybinds,
client_input_mode,
Some(os_input.clone()),
- )?
- .0
- {
- should_break = true;
+ ) {
+ Ok(route_action_should_break) => {
+ if route_action_should_break.0 {
+ should_break = true;
+ }
+ },
+ Err(e) => {
+ log::error!("{}", e);
+ },
}
}
},