summaryrefslogtreecommitdiff
path: root/test/parallel/test-windows-failed-heap-allocation.js
diff options
context:
space:
mode:
authorJared Kantrowitz <jared.kantrowitz@gmail.com>2017-06-24 15:37:59 -0400
committerRefael Ackermann <refack@gmail.com>2017-08-07 22:46:01 -0400
commit80ebb4282d29733fefbcee8deb9cc70348eace16 (patch)
treecbe4f012998e14f69a18f1079383394154cce17d /test/parallel/test-windows-failed-heap-allocation.js
parent7535a94c8a54bb6346c8e60dbae1c32d6f508212 (diff)
downloadandroid-node-v8-80ebb4282d29733fefbcee8deb9cc70348eace16.tar.gz
android-node-v8-80ebb4282d29733fefbcee8deb9cc70348eace16.tar.bz2
android-node-v8-80ebb4282d29733fefbcee8deb9cc70348eace16.zip
src: adjust windows abort behavior
Raising SIGABRT is handled in the CRT in windows, calling _exit() with ambiguous code "3" by default. This adjustment to the abort behavior gives a more sane exit code on abort, by calling _exit directly with code 134. PR-URL: https://github.com/nodejs/node/pull/13947 Fixes: https://github.com/nodejs/node/issues/12271 Refs: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abort Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Diffstat (limited to 'test/parallel/test-windows-failed-heap-allocation.js')
-rw-r--r--test/parallel/test-windows-failed-heap-allocation.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/parallel/test-windows-failed-heap-allocation.js b/test/parallel/test-windows-failed-heap-allocation.js
new file mode 100644
index 0000000000..465dcae2b6
--- /dev/null
+++ b/test/parallel/test-windows-failed-heap-allocation.js
@@ -0,0 +1,24 @@
+'use strict';
+const common = require('../common');
+
+// This test ensures that an out of memory error exits with code 134 on Windows
+
+if (!common.isWindows) return common.skip('Windows-only');
+
+const assert = require('assert');
+const { exec } = require('child_process');
+
+if (process.argv[2] === 'heapBomb') {
+ // heap bomb, imitates a memory leak quickly
+ const fn = (nM) => [...Array(nM)].map((i) => fn(nM ** 2));
+ fn(2);
+}
+
+// --max-old-space-size=3 is the min 'old space' in V8, explodes fast
+const cmd = `"${process.execPath}" --max-old-space-size=3 "${__filename}"`;
+exec(`${cmd} heapBomb`, common.mustCall((err) => {
+ const msg = `Wrong exit code of ${err.code}! Expected 134 for abort`;
+ // Note: common.nodeProcessAborted() is not asserted here because it
+ // returns true on 134 as well as 0xC0000005 (V8's base::OS::Abort)
+ assert.strictEqual(err.code, 134, msg);
+}));