parlib: Set line buffering for stdout
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 24 Apr 2017 23:50:21 +0000 (19:50 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 3 May 2017 16:13:02 +0000 (12:13 -0400)
I don't know why this is necessary and not already done by glibc
internally.  I've triggered this a lot with some later patches, but I don't
see why.  I also recall people having problems with this before - Gan and
Ron might have had it back with the early VM work.

Similarly, this might be related to commit c074a35e7f17 ("BB: manually
writes echo's buffer").  Line buffering helped back then, but we also still
didn't get the errno/errstr back (according to the commit message).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/panic.c

index 62bfb50..de7fc8a 100644 (file)
@@ -7,6 +7,15 @@
 
 char *argv0;
 
+static void __attribute__((constructor)) parlib_stdio_init(void)
+{
+       /* This isn't ideal, since it might affect some stdout streams where our
+        * parent tried to do something else.  Note that isatty() always returns
+        * TRUE, due to how we fake tcgetattr(), and that doesn't affect whatever
+        * our shells are doing to set us up. */
+       setlinebuf(stdout);
+}
+
 /*
  * Panic is called on unresolvable fatal errors.
  * It prints "panic: <message>", then causes a breakpoint exception,