Skip to content

Commit b8893c9

Browse files
committed
fix: remove setTimeout polling from _waitForActiveHandles, use event-driven handle drain
1 parent f694973 commit b8893c9

1 file changed

Lines changed: 8 additions & 14 deletions

File tree

packages/nodejs/src/bridge/active-handles.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,28 +99,22 @@ export function _waitForActiveHandles(): Promise<void> {
9999
const promises: Promise<void>[] = [];
100100

101101
if (hasHandles) {
102+
// Instead of polling with setTimeout (which uses IPC and starves user code),
103+
// register a resolver that fires when _unregisterHandle reduces handles to 0.
104+
// The _unregisterHandle function already calls _notifyHandleChange.
102105
promises.push(
103106
new Promise((resolve) => {
104107
let settled = false;
105108
const complete = () => {
106-
if (settled) {
107-
return;
108-
}
109+
if (settled) return;
109110
settled = true;
110111
resolve();
111112
};
112113
_waitResolvers.push(complete);
113-
const poll = () => {
114-
if (settled) {
115-
return;
116-
}
117-
if (_getActiveHandles().length === 0) {
118-
complete();
119-
return;
120-
}
121-
setTimeout(poll, 1000);
122-
};
123-
setTimeout(poll, 1000);
114+
// Check immediately in case handles already drained
115+
if (_getActiveHandles().length === 0) {
116+
complete();
117+
}
124118
}),
125119
);
126120
}

0 commit comments

Comments
 (0)