Skip to content

Commit 013fa59

Browse 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

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

‎lib/internal/perf/observe.js‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ const kDeprecationMessage =
7272
constkTypeSingle=0;
7373
constkTypeMultiple=1;
7474

75+
letgcTrackingInstalled=false;
76+
7577
constkSupportedEntryTypes=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

Lines 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+
constobs=newPerformanceObserver(()=>{});
14+
constobs2=newPerformanceObserver(()=>{});
15+
16+
obs.observe({type: 'gc'});
17+
obs2.observe({type: 'gc'});

0 commit comments

Comments
 (0)