Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dc38a45

Browse filesBrowse files
joyeecheungaduh95
authored andcommitted
debugger: fix event listener leak in the run command
It should remove both the error and the ready event listeners attached when either of them fires, instead of removing only the one whose corresponding event fires, otherwise the other event listener will always get leaked. PR-URL: #60464 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent dbf204c commit dc38a45
Copy full SHA for dc38a45

File tree

Expand file treeCollapse file tree

3 files changed

+11
-8
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+11
-8
lines changed
Open diff view settings
Collapse file

‎lib/internal/debugger/inspect_client.js‎

Copy file name to clipboardExpand all lines: lib/internal/debugger/inspect_client.js
+5-8Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const {
1313
const Buffer = require('buffer').Buffer;
1414
const crypto = require('crypto');
1515
const { ERR_DEBUGGER_ERROR } = require('internal/errors').codes;
16-
const { EventEmitter } = require('events');
16+
const { EventEmitter, once } = require('events');
1717
const http = require('http');
1818
const { URL } = require('internal/url');
1919

@@ -343,13 +343,10 @@ class Client extends EventEmitter {
343343
this.emit('ready');
344344
};
345345

346-
return new Promise((resolve, reject) => {
347-
this.once('error', reject);
348-
this.once('ready', resolve);
349-
350-
httpReq.on('upgrade', handshakeListener);
351-
httpReq.end();
352-
});
346+
const onReady = once(this, 'ready');
347+
httpReq.on('upgrade', handshakeListener);
348+
httpReq.end();
349+
return onReady;
353350
}
354351
}
355352

Collapse file

‎test/common/debugger.js‎

Copy file name to clipboardExpand all lines: test/common/debugger.js
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ function startCLI(args, flags = [], spawnOpts = {}, opts = { randomPort: true })
141141
return getOutput();
142142
},
143143

144+
get stderrOutput() {
145+
return stderrOutput;
146+
},
147+
144148
get rawOutput() {
145149
return outputBuffer.join('').toString();
146150
},
Collapse file

‎test/parallel/test-debugger-restart-message.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-debugger-restart-message.js
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ const startCLI = require('../common/debugger');
3131
} finally {
3232
await cli.quit();
3333
}
34+
35+
assert.doesNotMatch(cli.stderrOutput, /MaxListenersExceededWarning/);
3436
}
3537

3638
onWaitForInitialBreak();

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.