Skip to content

Commit 013fa59

Browse files
jasnelltargos
authored andcommitted
perf_hooks: fix PerformanceObserver 'gc' crash
Signed-off-by: James M Snell <[email protected]> Fixes: #38412 PR-URL: #38414 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Zijian Liu <[email protected]>
1 parent 4f6c4eb commit 013fa59

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

lib/internal/perf/observe.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ const kDeprecationMessage =
7272
const kTypeSingle = 0;
7373
const kTypeMultiple = 1;
7474

75+
let gcTrackingInstalled = false;
76+
7577
const kSupportedEntryTypes = ObjectFreeze([
7678
'function',
7779
'gc',
@@ -124,8 +126,11 @@ function maybeIncrementObserverCount(type) {
124126

125127
if (observerType !== undefined) {
126128
observerCounts[observerType]++;
127-
if (observerType === NODE_PERFORMANCE_ENTRY_TYPE_GC)
129+
if (!gcTrackingInstalled &&
130+
observerType === NODE_PERFORMANCE_ENTRY_TYPE_GC) {
128131
installGarbageCollectionTracking();
132+
gcTrackingInstalled = true;
133+
}
129134
}
130135
}
131136

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use strict';
2+
3+
require('../common');
4+
5+
// Verifies that setting up two observers to listen
6+
// to gc performance does not crash.
7+
8+
const {
9+
PerformanceObserver,
10+
} = require('perf_hooks');
11+
12+
// We don't actually care if the callback is ever invoked in this test
13+
const obs = new PerformanceObserver(() => {});
14+
const obs2 = new PerformanceObserver(() => {});
15+
16+
obs.observe({ type: 'gc' });
17+
obs2.observe({ type: 'gc' });

0 commit comments

Comments
 (0)