fix: clear timeout handle to prevent event loop from staying alive

This commit is contained in:
Mohamed Boudra
2026-02-02 21:15:28 +07:00
parent 4b2d16f2e1
commit e9325d92be

View File

@@ -48,17 +48,26 @@ export async function connectToDaemon(options?: ConnectOptions): Promise<DaemonC
// Connect with timeout
const connectPromise = client.connect()
let timeoutHandle: ReturnType<typeof setTimeout> | null = null
const timeoutPromise = new Promise<never>((_, reject) => {
setTimeout(() => {
timeoutHandle = setTimeout(() => {
reject(new Error(`Connection timeout after ${timeout}ms`))
}, timeout)
})
try {
await Promise.race([connectPromise, timeoutPromise])
// Clear the timeout so it doesn't keep the event loop alive
if (timeoutHandle) {
clearTimeout(timeoutHandle)
}
client.subscribeAgentUpdates({ subscriptionId: `cli:${process.pid}` })
return client
} catch (err) {
// Clear the timeout on error too
if (timeoutHandle) {
clearTimeout(timeoutHandle)
}
await client.close().catch(() => {})
throw err
}