From cc6719c71efddaed7d7cb437ae2b22b3c36c4f46 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 3 Jan 2024 12:55:07 +0100 Subject: [PATCH 1/2] fix(node): Anr should not block exit --- .../suites/anr/should-exit.js | 19 +++++++++++++++++++ .../node-integration-tests/suites/anr/test.ts | 15 +++++++++++++++ packages/node/src/integrations/anr/index.ts | 6 ++++++ 3 files changed, 40 insertions(+) create mode 100644 dev-packages/node-integration-tests/suites/anr/should-exit.js diff --git a/dev-packages/node-integration-tests/suites/anr/should-exit.js b/dev-packages/node-integration-tests/suites/anr/should-exit.js new file mode 100644 index 000000000000..cee261e8ccb3 --- /dev/null +++ b/dev-packages/node-integration-tests/suites/anr/should-exit.js @@ -0,0 +1,19 @@ +const Sentry = require('@sentry/node'); + +function configureSentry() { + Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0', + debug: true, + autoSessionTracking: false, + integrations: [new Sentry.Integrations.Anr({ captureStackTrace: true })], + }); +} + +async function main() { + configureSentry(); + await new Promise(resolve => setTimeout(resolve, 1000)); + process.exit(0); +} + +main(); diff --git a/dev-packages/node-integration-tests/suites/anr/test.ts b/dev-packages/node-integration-tests/suites/anr/test.ts index 011a0371a5d9..3849b895ee3f 100644 --- a/dev-packages/node-integration-tests/suites/anr/test.ts +++ b/dev-packages/node-integration-tests/suites/anr/test.ts @@ -115,6 +115,21 @@ conditionalTest({ min: 16 })('should report ANR when event loop blocked', () => }); }); + test('can exit', done => { + const testScriptPath = path.resolve(__dirname, 'should-exit.js'); + let hasClosed = false; + + setTimeout(() => { + if (!hasClosed) { + done(); + } + }, 5_000); + + childProcess.exec(`node ${testScriptPath}`, { encoding: 'utf8' }, (_, stdout) => { + hasClosed = true; + }); + }); + test('With session', done => { expect.assertions(9); diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index 47bc13a34ecd..a6837a3a6752 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -123,6 +123,10 @@ async function _startWorker(client: NodeClient, _options: Partial): Pro // Ensure this thread can't block app exit worker.unref(); + process.on('exit', () => { + worker.terminate(); + }); + const timer = setInterval(() => { try { const currentSession = getCurrentScope().getSession(); @@ -135,6 +139,8 @@ async function _startWorker(client: NodeClient, _options: Partial): Pro // } }, options.pollInterval); + // Timer should not block exit + timer.unref(); worker.on('message', (msg: string) => { if (msg === 'session-ended') { From 45ec4ea3532e72283918f4bed0a5a432a8151a0c Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 3 Jan 2024 13:10:08 +0100 Subject: [PATCH 2/2] Fix test --- dev-packages/node-integration-tests/suites/anr/test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dev-packages/node-integration-tests/suites/anr/test.ts b/dev-packages/node-integration-tests/suites/anr/test.ts index 3849b895ee3f..3e5e7c9643eb 100644 --- a/dev-packages/node-integration-tests/suites/anr/test.ts +++ b/dev-packages/node-integration-tests/suites/anr/test.ts @@ -120,9 +120,8 @@ conditionalTest({ min: 16 })('should report ANR when event loop blocked', () => let hasClosed = false; setTimeout(() => { - if (!hasClosed) { - done(); - } + expect(hasClosed).toBe(true); + done(); }, 5_000); childProcess.exec(`node ${testScriptPath}`, { encoding: 'utf8' }, (_, stdout) => {