mirror of
https://github.com/stablyai/orca.git
synced 2026-10-02 08:02:02 +00:00
fix: fence late deferred split closes
This commit is contained in:
@@ -86,6 +86,18 @@ describe('deferred split pane handoff', () => {
|
||||
])
|
||||
})
|
||||
|
||||
it('lets a late close discard a released handoff by its stable pane key', () => {
|
||||
const key = makePaneKey('tab-1', LEAF_1)
|
||||
const owner = beginDeferredSplitPaneHandoff(key, Promise.resolve('/source/cwd'))
|
||||
appendDeferredSplitPaneInput(owner, { data: 'must-not-replay', kind: 'ordinary' })
|
||||
|
||||
// Whole-tab cleanup releases the mount-local handle before a stale close callback can run.
|
||||
releaseDeferredSplitPaneHandoff(owner)
|
||||
discardDeferredSplitPaneHandoffForKey(key)
|
||||
|
||||
expect(claimDeferredSplitPaneHandoff(key)).toBeNull()
|
||||
})
|
||||
|
||||
it('clears or discards only the current owner', () => {
|
||||
const clearedKey = makePaneKey('tab-clear', LEAF_1)
|
||||
const cleared = beginDeferredSplitPaneHandoff(clearedKey, Promise.resolve('/clear'))
|
||||
|
||||
@@ -1649,6 +1649,10 @@ export function useTerminalPaneLifecycle({
|
||||
// whole-tab remount is allowed to retain this record.
|
||||
discardDeferredSplitPaneHandoff(deferredSplitHandoff)
|
||||
deferredSplitHandoffs.delete(paneId)
|
||||
} else if (leafId) {
|
||||
// A close callback can outlive its mount-local numeric handle; the
|
||||
// durable leaf key still identifies the deferred split to discard.
|
||||
discardDeferredSplitPaneHandoffForKey(makePaneKey(tabId, leafId))
|
||||
}
|
||||
if (leafId && isRetiredSurface) {
|
||||
retireMountedTerminalPaneSurface({
|
||||
|
||||
Reference in New Issue
Block a user