Skip to content
This repository has been archived by the owner on Aug 31, 2018. It is now read-only.

Commit

Permalink
lib: instantiate console methods eagerly
Browse files Browse the repository at this point in the history
Before this commit they were instantiated lazily but that fails when the
first call is under stack overflow conditions.

PR-URL: nodejs/node#14791
Fixes: https://github.com/nodejs/help#778
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
bnoordhuis authored and addaleax committed Aug 28, 2017
1 parent 13a31cb commit ea3285c
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
19 changes: 18 additions & 1 deletion lib/internal/bootstrap_node.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
setupProcessICUVersions();

setupGlobalVariables();
if (!process._noBrowserGlobals) {
const browserGlobals = !process._noBrowserGlobals;
if (browserGlobals) {
setupGlobalTimeouts();
setupGlobalConsole();
}
Expand All @@ -40,6 +41,22 @@
NativeModule.require('internal/process/warning').setup();
NativeModule.require('internal/process/next_tick').setup();
NativeModule.require('internal/process/stdio').setup();
if (browserGlobals) {
// Instantiate eagerly in case the first call is under stack overflow
// conditions where instantiation doesn't work.
const console = global.console;
console.assert;
console.clear;
console.count;
console.countReset;
console.dir;
console.error;
console.log;
console.time;
console.timeEnd;
console.trace;
console.warn;
}
_process.setupKillAndExit();
_process.setupSignalHandlers();
if (global.__coverage__)
Expand Down
18 changes: 18 additions & 0 deletions test/message/stack_overflow_async.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Flags: --stack_trace_limit=3

'use strict';
require('../common');

async function f() {
await f();
}

async function g() {
try {
await f();
} catch (e) {
console.log(e);
}
}

g();
4 changes: 4 additions & 0 deletions test/message/stack_overflow_async.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
RangeError: Maximum call stack size exceeded
at f (*test*message*stack_overflow_async.js:*)
at f (*test*message*stack_overflow_async.js:7:*)
at f (*test*message*stack_overflow_async.js:7:*)

0 comments on commit ea3285c

Please sign in to comment.