Skip to content
This repository was archived by the owner on Apr 22, 2023. It is now read-only.

Commit 270c2de

Browse files
committed
src: OnFatalError handler must abort()
We are in an unrecoverable state if v8 throws a FatalError, actually ask the operating system to dump core in this case. Fixes #6836
1 parent fc7e217 commit 270c2de

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/node.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1914,7 +1914,7 @@ static void OnFatalError(const char* location, const char* message) {
19141914
} else {
19151915
fprintf(stderr, "FATAL ERROR: %s\n", message);
19161916
}
1917-
exit(5);
1917+
abort();
19181918
}
19191919

19201920
void FatalException(TryCatch &try_catch) {

test/simple/test-abort-fatal-error.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright Joyent, Inc. and other Node contributors.
2+
3+
// Permission is hereby granted, free of charge, to any person obtaining a
4+
// copy of this software and associated documentation files (the
5+
// "Software"), to deal in the Software without restriction, including
6+
// without limitation the rights to use, copy, modify, merge, publish,
7+
// distribute, sublicense, and/or sell copies of the Software, and to permit
8+
// persons to whom the Software is furnished to do so, subject to the
9+
// following conditions:
10+
11+
// The above copyright notice and this permission notice shall be included
12+
// in all copies or substantial portions of the Software.
13+
14+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15+
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17+
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18+
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20+
// USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
22+
var assert = require('assert');
23+
var common = require('../common');
24+
25+
if (process.platform === 'win32') {
26+
console.log('skipping test on windows');
27+
process.exit(0);
28+
}
29+
30+
var exec = require('child_process').exec;
31+
32+
var cmdline = 'ulimit -c 0; ' + process.execPath;
33+
cmdline += ' --max-old-space-size=1 --max-new-space-size=1';
34+
cmdline += ' -e "setInterval(function() { new Buffer(1024); }, 1);"';
35+
36+
exec(cmdline, function(err, stdout, stderr) {
37+
assert(err);
38+
assert(stderr.toString().match(/abort/i));
39+
});

0 commit comments

Comments
 (0)