diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-07 16:14:46 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-07 15:14:46 +0200 |
| commit | e7d8220788b4fa7c266a1e4457591b694478771c (patch) | |
| tree | 272303d74e0b58c11f9c0c434dae8335d3d06703 /src/app/api | |
| parent | 482818130407691154d1635d4029b95d0e730104 (diff) | |
fix: preserve sessions after interrupted pane exits (#3418)
* fix: preserve sessions when pane shells are signaled
refs #3415
* fix: preserve shutdown checkpoints across platforms
refs #3415
---------
Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
Diffstat (limited to 'src/app/api')
| -rw-r--r-- | src/app/api/plugins/mod.rs | 6 | ||||
| -rw-r--r-- | src/app/api/worktrees.rs | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/app/api/plugins/mod.rs b/src/app/api/plugins/mod.rs index f4b6329b..8ad083d4 100644 --- a/src/app/api/plugins/mod.rs +++ b/src/app/api/plugins/mod.rs @@ -2210,6 +2210,7 @@ command = ["sh", "-c", "printf %s ${{HERDR_PANE_ID-unset}} > '{}'; sleep 1"] app.handle_internal_event(crate::events::AppEvent::PaneDied { pane_id: opened_pane_id, + exit_reason: crate::platform::ChildExitReason::Exited, }); assert!(app.state.popup_pane.is_none()); assert!(event_hub.events_after(0).is_empty()); @@ -3448,7 +3449,10 @@ command = ["sh", "-c", "echo ok"] }, ); - app.handle_internal_event(crate::events::AppEvent::PaneDied { pane_id }); + app.handle_internal_event(crate::events::AppEvent::PaneDied { + pane_id, + exit_reason: crate::platform::ChildExitReason::Exited, + }); assert!(!app.state.plugin_panes.contains_key(&pane_id)); } diff --git a/src/app/api/worktrees.rs b/src/app/api/worktrees.rs index 3c8407b9..71f2e03a 100644 --- a/src/app/api/worktrees.rs +++ b/src/app/api/worktrees.rs @@ -2319,8 +2319,10 @@ mod tests { .pending_worktree_remove_runtime_restores .contains_key(&pane_id)); - let pane_updates = - app.handle_internal_event_with_pane_updates(AppEvent::PaneDied { pane_id }); + let pane_updates = app.handle_internal_event_with_pane_updates(AppEvent::PaneDied { + pane_id, + exit_reason: crate::platform::ChildExitReason::Exited, + }); assert!(matches!( pane_updates.as_slice(), [update] if update.agent_released && update.suppress_completion |
