Skip to content

Commit 7a2794a

Browse files
committed
Clear dangling timeout that keeps unit tests event loop alive
This fixes the issue where test-unit could run for up to 5 seconds after the tests have already finished.
1 parent da2267a commit 7a2794a

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

src/common/InputHandler.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,19 @@ export class InputHandler extends Disposable implements IInputHandler {
407407
private _logSlowResolvingAsync(p: Promise<boolean>): void {
408408
// log a limited warning about an async handler taking too long
409409
if (this._logService.logLevel <= LogLevelEnum.WARN) {
410-
Promise.race([p, new Promise((res, rej) => setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT))])
411-
.catch(err => {
410+
let slowTimeout: ReturnType<typeof setTimeout> | undefined;
411+
const slowPromise = new Promise<never>((_res, rej) => {
412+
slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT);
413+
});
414+
Promise.race([p, slowPromise])
415+
.then(() => {
416+
if (slowTimeout !== undefined) {
417+
clearTimeout(slowTimeout);
418+
}
419+
}, err => {
420+
if (slowTimeout !== undefined) {
421+
clearTimeout(slowTimeout);
422+
}
412423
if (err !== '#SLOW_TIMEOUT') {
413424
throw err;
414425
}

0 commit comments

Comments
 (0)