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 013fa59

Browse filesBrowse files
jasnelltargos
authored andcommitted
perf_hooks: fix PerformanceObserver 'gc' crash
Signed-off-by: James M Snell <jasnell@gmail.com> Fixes: #38412 PR-URL: #38414 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Zijian Liu <lxxyxzj@gmail.com>
1 parent 4f6c4eb commit 013fa59
Copy full SHA for 013fa59

File tree

Expand file treeCollapse file tree

2 files changed

+23
-1
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+23
-1
lines changed
Open diff view settings
Collapse file

‎lib/internal/perf/observe.js‎

Copy file name to clipboardExpand all lines: lib/internal/perf/observe.js
+6-1Lines changed: 6 additions & 1 deletion
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

Collapse file
+17Lines changed: 17 additions & 0 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.