-
-
Couldn't load subscription status.
- Fork 33.6k
Closed
Labels
timersIssues and PRs related to the timers subsystem / setImmediate, setInterval, setTimeout.Issues and PRs related to the timers subsystem / setImmediate, setInterval, setTimeout.
Description
- Version: v4.8.7, v6.12.3, v8.11.0, v9.11.1
- Platform: MacOS 10.13.4
- Subsystem: Timers
I have an uncaughtException handler which performs asynchronous cleanup. This cleanup may only take a certain amount of time, after which the process is forcibly exited. This time limitation is implemented through an unreferenced setTimeout.
If an uncaught exception is thrown from inside another timer, then my cleanup timeout fires instantly.
Here's a reproduction:
'use strict'
process.on('uncaughtException', err => {
console.error('caught exception', err)
let start = Date.now()
const timer = setTimeout(() => {
console.error('timeout duration %sms', Date.now() - start)
}, 1000).unref()
console.error('created timer')
})
setTimeout(() => {
throw new Error('trigger')
}, 1000)
setTimeout(() => {}, 5000) // keep process alive$ node test.js
caught exception Error: trigger
at Timeout.setTimeout [as _onTimeout] (/private/var/folders/2_/qczp184x76b2nl034sq5hvxw0000gn/T/tmp.iAigvol9mj/test.js:12:9)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
created timer
timeout duration 2msThe behavior is as expected when the timer is not unreferenced.
Metadata
Metadata
Assignees
Labels
timersIssues and PRs related to the timers subsystem / setImmediate, setInterval, setTimeout.Issues and PRs related to the timers subsystem / setImmediate, setInterval, setTimeout.