Skip to content

Commit 8c6b72e

Browse files
timfishc298lee
authored andcommitted
fix(node): Anr doesn't block exit (#10064)
1 parent 3403f57 commit 8c6b72e

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const Sentry = require('@sentry/node');
2+
3+
function configureSentry() {
4+
Sentry.init({
5+
dsn: 'https://[email protected]/1337',
6+
release: '1.0',
7+
debug: true,
8+
autoSessionTracking: false,
9+
integrations: [new Sentry.Integrations.Anr({ captureStackTrace: true })],
10+
});
11+
}
12+
13+
async function main() {
14+
configureSentry();
15+
await new Promise(resolve => setTimeout(resolve, 1000));
16+
process.exit(0);
17+
}
18+
19+
main();

dev-packages/node-integration-tests/suites/anr/should-exit.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ function configureSentry() {
1313
async function main() {
1414
configureSentry();
1515
await new Promise(resolve => setTimeout(resolve, 1000));
16-
process.exit(0);
1716
}
1817

1918
main();

dev-packages/node-integration-tests/suites/anr/test.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ conditionalTest({ min: 16 })('should report ANR when event loop blocked', () =>
115115
});
116116
});
117117

118-
test('can exit', done => {
118+
test('should exit', done => {
119119
const testScriptPath = path.resolve(__dirname, 'should-exit.js');
120120
let hasClosed = false;
121121

@@ -129,6 +129,20 @@ conditionalTest({ min: 16 })('should report ANR when event loop blocked', () =>
129129
});
130130
});
131131

132+
test('should exit forced', done => {
133+
const testScriptPath = path.resolve(__dirname, 'should-exit-forced.js');
134+
let hasClosed = false;
135+
136+
setTimeout(() => {
137+
expect(hasClosed).toBe(true);
138+
done();
139+
}, 5_000);
140+
141+
childProcess.exec(`node ${testScriptPath}`, { encoding: 'utf8' }, () => {
142+
hasClosed = true;
143+
});
144+
});
145+
132146
test('With session', done => {
133147
expect.assertions(9);
134148

packages/node/src/integrations/anr/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,6 @@ async function _startWorker(client: NodeClient, _options: Partial<Options>): Pro
122122
const worker = new Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {
123123
workerData: options,
124124
});
125-
// Ensure this thread can't block app exit
126-
worker.unref();
127125

128126
process.on('exit', () => {
129127
worker.terminate();
@@ -160,4 +158,7 @@ async function _startWorker(client: NodeClient, _options: Partial<Options>): Pro
160158
clearInterval(timer);
161159
log('ANR worker exit', code);
162160
});
161+
162+
// Ensure this thread can't block app exit
163+
worker.unref();
163164
}

0 commit comments

Comments
 (0)