| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 381e705 commit 81c94a3
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1171,6 +1171,10 @@ that a "possible EventEmitter memory leak" has been detected. For any single | |||
| 1171 | 1171 | `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` | |
| 1172 | 1172 | methods can be used to temporarily avoid this warning: | |
| 1173 | 1173 | ||
| 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 | + | ||
| 1174 | 1178 | ```mjs | |
| 1175 | 1179 | import { EventEmitter } from 'node:events'; | |
| 1176 | 1180 | const emitter = new EventEmitter(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -28,6 +28,7 @@ const { | |||
| 28 | 28 | kResistStopPropagation, | |
| 29 | 29 | kWeakHandler, | |
| 30 | 30 | } = require('internal/event_target'); | |
| 31 | + const { kMaxEventTargetListeners } = require('events'); | ||
| 31 | 32 | const { | |
| 32 | 33 | customInspectSymbol, | |
| 33 | 34 | kEmptyObject, | |
@@ -165,6 +166,7 @@ class AbortSignal extends EventTarget { | |||
| 165 | 166 | } | |
| 166 | 167 | super(); | |
| 167 | 168 | ||
| 169 | + this[kMaxEventTargetListeners] = 0; | ||
| 168 | 170 | const { | |
| 169 | 171 | aborted = false, | |
| 170 | 172 | reason = undefined, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -12,22 +12,22 @@ const { setTimeout } = require('timers/promises'); | |||
| 12 | 12 | common.expectWarning({ | |
| 13 | 13 | MaxListenersExceededWarning: [ | |
| 14 | 14 | ['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() ' + | ||
| 16 | 16 | 'to increase limit'], | |
| 17 | 17 | ['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 ' + | ||
| 21 | 21 | 'limit'], | |
| 22 | 22 | ['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 ' + | ||
| 26 | 26 | '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 ' + | ||
| 31 | 31 | 'limit'], | |
| 32 | 32 | ], | |
| 33 | 33 | }); | |
@@ -65,13 +65,25 @@ common.expectWarning({ | |||
| 65 | 65 | mc.port1.addEventListener('foo', () => {}); | |
| 66 | 66 | mc.port1.addEventListener('foo', () => {}); | |
| 67 | 67 | mc.port1.addEventListener('foo', () => {}); | |
| 68 | + } | ||
| 68 | 69 | ||
| 70 | + { | ||
| 71 | + // No warning emitted because AbortController ignores `EventEmitter.defaultMaxListeners` | ||
| 72 | + setMaxListeners(2); | ||
| 69 | 73 | const ac = new AbortController(); | |
| 70 | 74 | ac.signal.addEventListener('foo', () => {}); | |
| 71 | 75 | ac.signal.addEventListener('foo', () => {}); | |
| 72 | 76 | ac.signal.addEventListener('foo', () => {}); | |
| 73 | 77 | } | |
| 74 | 78 | ||
| 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 | + | ||
| 75 | 87 | { | |
| 76 | 88 | // It works for EventEmitters also | |
| 77 | 89 | const ee = new EventEmitter(); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments