diff --git a/src/main/ipc/ssh.test.ts b/src/main/ipc/ssh.test.ts index bea2164905d..39843b601c3 100644 --- a/src/main/ipc/ssh.test.ts +++ b/src/main/ipc/ssh.test.ts @@ -618,13 +618,19 @@ describe('SSH IPC handlers', () => { const detachFlush = new Promise((resolve) => { releaseDetach = resolve }) - mockStore.markSshRemotePtyLeasesAsync.mockImplementationOnce(() => detachFlush) + let signalEnteredDetach = (): void => {} + const enteredDetach = new Promise((resolve) => { + signalEnteredDetach = resolve + }) + mockStore.markSshRemotePtyLeasesAsync.mockImplementationOnce(() => { + signalEnteredDetach() + return detachFlush + }) const replacement = handlers.get('ssh:connect')!(null, { targetId: 'ssh-1' }) - // Why: let the replacement connect reach the flush before shutdown snapshots what to drain. - for (let tick = 0; tick < 10; tick++) { - await Promise.resolve() - } + // Why await the flush entry and not ticks: shutdown must not snapshot what to drain until the + // replacement connect is parked in the lease flush. + await enteredDetach expect(mockStore.markSshRemotePtyLeasesAsync).toHaveBeenCalledWith('ssh-1', 'detached') mockConnectionManager.disconnectAll.mockClear() diff --git a/src/main/ssh/ssh-owner-recovery-retry.ts b/src/main/ssh/ssh-owner-recovery-retry.ts index ea460f63d13..9449853acdb 100644 --- a/src/main/ssh/ssh-owner-recovery-retry.ts +++ b/src/main/ssh/ssh-owner-recovery-retry.ts @@ -46,7 +46,8 @@ export async function retrySshOwnerRecoveryWhilePublicationPending( return await attempt() } catch (error) { if ( - (error as { code?: unknown }).code !== PTY_CONSUMER_OWNER_RECOVERY_PENDING_ERROR || + (error as { code?: unknown } | null | undefined)?.code !== + PTY_CONSUMER_OWNER_RECOVERY_PENDING_ERROR || !gate.isCurrent() ) { throw error