Browse Source

src: disable stdio buffering

Disable stdio buffering, it interacts poorly with printf() calls from
elsewhere in the program (e.g., any logging from V8.)  Unbreaks among
other things the `--trace_debug_json` switch.

Undoes commit 0966ab99 ("src: force line buffering for stderr"), which
in retrospect is not a proper fix.  Turning on line buffering fixed a
flaky test on SmartOS but the test wasn't failing on other platforms,
where stderr wasn't line-buffered either.  Mark the test flaky again,
it failed once in a run of 333 tries on the smartos-64 buildbot.

Disabling buffering should be safe even when mixed with non-blocking
stdio I/O because libuv goes to great lengths to reopen the tty file
descriptors and falls back to blocking I/O when that fails.

PR-URL: https://github.com/nodejs/node/pull/7610
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
v4.x
Ben Noordhuis 9 years ago
committed by Myles Borins
parent
commit
8b93fddd1b
  1. 5
      src/node_main.cc
  2. 1
      test/parallel/parallel.status

5
src/node_main.cc

@ -42,7 +42,10 @@ int wmain(int argc, wchar_t *wargv[]) {
#else #else
// UNIX // UNIX
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
setvbuf(stderr, NULL, _IOLBF, 1024); // Disable stdio buffering, it interacts poorly with printf()
// calls elsewhere in the program (e.g., any logging from V8.)
setvbuf(stdout, nullptr, _IONBF, 0);
setvbuf(stderr, nullptr, _IONBF, 0);
return node::Start(argc, argv); return node::Start(argc, argv);
} }
#endif #endif

1
test/parallel/parallel.status

@ -15,6 +15,7 @@ test-tick-processor : PASS,FLAKY
[$system==macos] [$system==macos]
[$system==solaris] # Also applies to SmartOS [$system==solaris] # Also applies to SmartOS
test-debug-signal-cluster : PASS,FLAKY
[$system==freebsd] [$system==freebsd]

Loading…
Cancel
Save