Skip to content

Commit 5e66c6a

Browse files
committed
fix: high cpu overhead from unreleased timeout
1 parent 3eb9fd9 commit 5e66c6a

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

sources/modules/requester.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ export class SolidisRequester {
242242
return socket;
243243
}
244244

245-
async #waitForSocketDrain(): Promise<void> {
245+
async #waitForSocketDrain(
246+
connectionTimeoutId: NodeJS.Timeout,
247+
): Promise<void> {
246248
const socket = this.#getSocketOrThrow();
247249

248250
return new Promise<void>((resolve) => {
@@ -254,6 +256,7 @@ export class SolidisRequester {
254256

255257
const onDrain = () => {
256258
clearTimeout(drainTimeoutId);
259+
clearTimeout(connectionTimeoutId);
257260

258261
resolve();
259262
};
@@ -265,27 +268,29 @@ export class SolidisRequester {
265268
#getSocketWriteEventHandlers() {
266269
const socket = this.#getSocketOrThrow();
267270

271+
const timeoutId = setTimeout(() => {
272+
handlers.isError = true;
273+
handlers.error = new SolidisRequesterError('Socket timed out');
274+
}, this.#options.socketWriteTimeout);
275+
268276
const handlers: SolidisSocketWriteEventHandlers = {
269277
onError: (error: Error) => {
270278
handlers.isError = true;
271279
handlers.error = error;
272280

273281
clearTimeout(timeoutId);
274282
},
275-
waitForDrain: () => this.#waitForSocketDrain(),
283+
waitForDrain: () => this.#waitForSocketDrain(timeoutId),
276284
removeEventListeners: () => {
277285
socket.removeListener('error', handlers.onError);
278286
socket.removeListener('close', handlers.onError);
287+
288+
clearTimeout(timeoutId);
279289
},
280290
isError: false,
281291
error: null,
282292
};
283293

284-
const timeoutId = setTimeout(() => {
285-
handlers.isError = true;
286-
handlers.error = new SolidisRequesterError('Socket timed out');
287-
}, this.#options.socketWriteTimeout);
288-
289294
socket.once('error', handlers.onError);
290295
socket.once('close', handlers.onError);
291296

0 commit comments

Comments
 (0)