GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — lib: disable default memory leak warning for AbortSignal · nodejs/node@5aec513

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • doc/api
    • events.md
  • lib/internal
    • abort_controller.js
  • test/parallel
    • test-eventtarget-memoryleakwarning.js
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎doc/api/events.md‎

Copy file name to clipboardExpand all lines: doc/api/events.md
+4Lines changed: 4 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,10 @@ that a "possible EventEmitter memory leak" has been detected. For any single
11711171
`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()`
11721172
methods can be used to temporarily avoid this warning:
11731173

1174+
`defaultMaxListeners` has no effect on `AbortSignal` instances. While it is
1175+
still possible to use [`emitter.setMaxListeners(n)`][] to set a warning limit
1176+
for individual `AbortSignal` instances, per default `AbortSignal` instances will not warn.
1177+
11741178
```mjs
11751179
import { EventEmitter } from 'node:events';
11761180
const emitter = new EventEmitter();
Collapse file

‎lib/internal/abort_controller.js‎

Copy file name to clipboardExpand all lines: lib/internal/abort_controller.js
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const {
2828
kResistStopPropagation,
2929
kWeakHandler,
3030
} = require('internal/event_target');
31+
const { kMaxEventTargetListeners } = require('events');
3132
const {
3233
customInspectSymbol,
3334
kEmptyObject,
@@ -164,6 +165,7 @@ class AbortSignal extends EventTarget {
164165
}
165166
super();
166167

168+
this[kMaxEventTargetListeners] = 0;
167169
const {
168170
aborted = false,
169171
reason = undefined,
Collapse file

‎test/parallel/test-eventtarget-memoryleakwarning.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-eventtarget-memoryleakwarning.js
+23-11Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ const { setTimeout } = require('timers/promises');
1212
common.expectWarning({
1313
MaxListenersExceededWarning: [
1414
['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
15-
'EventTarget. MaxListeners is 2. Use events.setMaxListeners() ' +
15+
'EventTarget. MaxListeners is 2. Use events.setMaxListeners() ' +
1616
'to increase limit'],
1717
['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
18-
'[MessagePort [EventTarget]]. ' +
19-
'MaxListeners is 2. ' +
20-
'Use events.setMaxListeners() to increase ' +
18+
'[MessagePort [EventTarget]]. ' +
19+
'MaxListeners is 2. ' +
20+
'Use events.setMaxListeners() to increase ' +
2121
'limit'],
2222
['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
23-
'[MessagePort [EventTarget]]. ' +
24-
'MaxListeners is 2. ' +
25-
'Use events.setMaxListeners() to increase ' +
23+
'[MessagePort [EventTarget]]. ' +
24+
'MaxListeners is 2. ' +
25+
'Use events.setMaxListeners() to increase ' +
2626
'limit'],
27-
['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
28-
'[AbortSignal]. ' +
29-
'MaxListeners is 2. ' +
30-
'Use events.setMaxListeners() to increase ' +
27+
['Possible EventTarget memory leak detected. 2 foo listeners added to ' +
28+
'[AbortSignal]. ' +
29+
'MaxListeners is 1. ' +
30+
'Use events.setMaxListeners() to increase ' +
3131
'limit'],
3232
],
3333
});
@@ -65,13 +65,25 @@ common.expectWarning({
6565
mc.port1.addEventListener('foo', () => {});
6666
mc.port1.addEventListener('foo', () => {});
6767
mc.port1.addEventListener('foo', () => {});
68+
}
6869

70+
{
71+
// No warning emitted because AbortController ignores `EventEmitter.defaultMaxListeners`
72+
setMaxListeners(2);
6973
const ac = new AbortController();
7074
ac.signal.addEventListener('foo', () => {});
7175
ac.signal.addEventListener('foo', () => {});
7276
ac.signal.addEventListener('foo', () => {});
7377
}
7478

79+
{
80+
// Will still warn as `setMaxListeners` can still manually set a limit
81+
const ac = new AbortController();
82+
setMaxListeners(1, ac.signal);
83+
ac.signal.addEventListener('foo', () => {});
84+
ac.signal.addEventListener('foo', () => {});
85+
}
86+
7587
{
7688
// It works for EventEmitters also
7789
const ee = new EventEmitter();

0 commit comments

Comments
0 (0)
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.