Add periodic cleanup for orphaned terminals

Every 5 minutes, check for terminals whose sessions have ended
but weren't properly disposed. This handles cases where a server
crash or network issue prevented normal WebSocket close.
This commit is contained in:
Jared Miller 2026-01-31 12:00:48 -05:00
parent 22c5c3d102
commit 58996a51f8
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C

View file

@ -727,4 +727,20 @@ setInterval(() => {
// Periodic persistence of dirty session states (every 5s)
setInterval(persistDirtySessions, 5000);
// Periodic cleanup for orphaned terminals (every 5 minutes)
// Handles cases where session ended but WebSocket didn't close properly
setInterval(
() => {
for (const [sessionId, termSession] of sessionTerminals.entries()) {
const session = getSession(sessionId);
if (session?.ended_at) {
console.debug(`Cleaning up orphaned terminal for session ${sessionId}`);
disposeTerminal(termSession);
sessionTerminals.delete(sessionId);
}
}
},
5 * 60 * 1000,
);
export { server };