-
Notifications
You must be signed in to change notification settings - Fork 30k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
src,lib: make ^C print a JS stack trace
If terminating the process with ctrl-c / SIGINT, prints a JS stacktrace leading up to the currently executing code. The feature would be enabled under option `--trace-sigint`. Conditions of no stacktrace on sigint: - has (an) active sigint listener(s); - main thread is idle (i.e. uv polling), a message instead of stacktrace would be printed. PR-URL: #29207 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Christopher Hiller <[email protected]> Reviewed-By: Rich Trott <[email protected]>
- Loading branch information
1 parent
ef4d081
commit 3dd4089
Showing
20 changed files
with
405 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
'use strict'; | ||
|
||
const { | ||
TraceSigintWatchdog | ||
} = internalBinding('watchdog'); | ||
|
||
class SigintWatchdog extends TraceSigintWatchdog { | ||
_started = false; | ||
_effective = false; | ||
_onNewListener = (eve) => { | ||
if (eve === 'SIGINT' && this._effective) { | ||
super.stop(); | ||
this._effective = false; | ||
} | ||
}; | ||
_onRemoveListener = (eve) => { | ||
if (eve === 'SIGINT' && process.listenerCount('SIGINT') === 0 && | ||
!this._effective) { | ||
super.start(); | ||
this._effective = true; | ||
} | ||
} | ||
|
||
start() { | ||
if (this._started) { | ||
return; | ||
} | ||
this._started = true; | ||
// Prepend sigint newListener to remove stop watchdog before signal wrap | ||
// been activated. Also make sigint removeListener been ran after signal | ||
// wrap been stopped. | ||
process.prependListener('newListener', this._onNewListener); | ||
process.addListener('removeListener', this._onRemoveListener); | ||
|
||
if (process.listenerCount('SIGINT') === 0) { | ||
super.start(); | ||
this._effective = true; | ||
} | ||
} | ||
|
||
stop() { | ||
if (!this._started) { | ||
return; | ||
} | ||
this._started = false; | ||
process.removeListener('newListener', this._onNewListener); | ||
process.removeListener('removeListener', this._onRemoveListener); | ||
|
||
if (this._effective) { | ||
super.stop(); | ||
this._effective = false; | ||
} | ||
} | ||
} | ||
|
||
|
||
module.exports = { | ||
SigintWatchdog | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -87,6 +87,7 @@ | |
V(v8) \ | ||
V(wasi) \ | ||
V(worker) \ | ||
V(watchdog) \ | ||
V(zlib) | ||
|
||
#define NODE_BUILTIN_MODULES(V) \ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.