fix(ssh-terminal): close owner sockets when presentations unmount (#1501)

This commit is contained in:
ZacharyZcR authored and GitHub committed 2026-09-30 09:46:29 -05:00
1 parent 24def2b613
commit c265758cdd
2 files changed
+98 -29

No files matched your search

@@ -412,7 +412,7 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
isAttachingSessionRef.current = false;
return () => {};
}, [hostConfig.id]);
}, [hostConfig.id, hostConfig.instanceId]);
const connectionAttemptIdRef = useRef(0);
const totpTimeoutRef = useRef<NodeJS.Timeout | null>(null);
const connectionTimeoutRef = useRef<NodeJS.Timeout | null>(null);
@@ -2886,40 +2886,34 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
useEffect(() => {
isMountedRef.current = true;
const currentHostId = hostConfig.id;
return () => {
if (!isMountedRef.current) {
return;
}
if (
currentHostIdRef.current !== currentHostId &&
currentHostIdRef.current !== null
) {
isUnmountingRef.current = true;
shouldNotReconnectRef.current = true;
isReconnectingRef.current = false;
setIsConnecting(false);
if (reconnectTimeoutRef.current)
clearTimeout(reconnectTimeoutRef.current);
if (connectionTimeoutRef.current)
clearTimeout(connectionTimeoutRef.current);
if (totpTimeoutRef.current) clearTimeout(totpTimeoutRef.current);
if (pingIntervalRef.current) {
clearInterval(pingIntervalRef.current);
pingIntervalRef.current = null;
}
if (pongTimeoutRef.current) {
clearTimeout(pongTimeoutRef.current);
pongTimeoutRef.current = null;
}
if (webSocketRef.current) {
webSocketRef.current.close();
}
isMountedRef.current = false;
isUnmountingRef.current = true;
shouldNotReconnectRef.current = true;
isReconnectingRef.current = false;
setIsConnecting(false);
if (reconnectTimeoutRef.current)
clearTimeout(reconnectTimeoutRef.current);
if (connectionTimeoutRef.current)
clearTimeout(connectionTimeoutRef.current);
if (totpTimeoutRef.current) clearTimeout(totpTimeoutRef.current);
if (pingIntervalRef.current) {
clearInterval(pingIntervalRef.current);
pingIntervalRef.current = null;
}
if (pongTimeoutRef.current) {
clearTimeout(pongTimeoutRef.current);
pongTimeoutRef.current = null;
}
if (webSocketRef.current) {
webSocketRef.current.close();
}
isMountedRef.current = false;
};
}, [hostConfig.id, hostConfig.instanceId]);