On 06/12/2017 04:23 AM, Jose Fonseca wrote:

On 07/06/17 21:17, Brian Paul wrote:
Windows doesn't immediately flush stdout/stderr after printf().
Use setbuf() to disable buffering on Windows.

Hmm, I thought that Windows immediately flushed stderr/stdout when it is
a TTY, just like Linux.

Most like stdout/stderr is not a TTY.  That is

   isatty(STDOUT_FILENO)
   isatty(STDERR_FILENO)

returns false.

Are you using a Cygwin shell/terminal? Perhaps that's the issue -- mayve
it's redirecting stdout/stderr to a pipe behind your back.

Yes, Cygwin. I see the same problem with any app that writes to stderr/stdio (like Mesa demos).



At any rate, it doesn't hurt to disable buffering, to cover all cases,
so this is

Reviewed-by: Jose Fonseca <[email protected]>

though it might be worth rephrasing the comment, as I don't think
Windows differs from Linux in this regard.

I'll update the comment.  Thanks.

-Brian


Jose

Refactor the init code a bit to avoid calling setbuf() from some
arbitrary place otherwise.
---
  tests/util/piglit-framework-gl.h |  2 +-
  tests/util/piglit-util.c         | 24 +++++++++++++++++++++++-
  tests/util/piglit-util.h         |  2 +-
  3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/tests/util/piglit-framework-gl.h
b/tests/util/piglit-framework-gl.h
index 992f28a..970fd55 100644
--- a/tests/util/piglit-framework-gl.h
+++ b/tests/util/piglit-framework-gl.h
@@ -271,7 +271,7 @@ piglit_gl_test_run(int argc, char *argv[],

{                                                                    \
                  struct piglit_gl_test_config
config;                         \

\
-
piglit_disable_error_message_boxes();                        \
+
piglit_general_init();                                       \

\

piglit_gl_test_config_init(&config);                         \

\
diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c
index 6b34c46..15a178b 100644
--- a/tests/util/piglit-util.c
+++ b/tests/util/piglit-util.c
@@ -317,7 +317,7 @@ piglit_report_subtest_result(enum piglit_result
result, const char *format, ...)
  }
-void
+static void
  piglit_disable_error_message_boxes(void)
  {
      /* When Windows' error message boxes are disabled for this
process (as
@@ -354,6 +354,28 @@ piglit_disable_error_message_boxes(void)
  }
+static void
+piglit_set_line_buffering(void)
+{
+    /* Windows doesn't immediately flush stdout/stderr after printf
+     * calls as we see on Linux.  To get immediate flushing, we disable
+     * buffering here.
+     */
+#ifdef _WIN32
+    setbuf(stdout, NULL);
+    setbuf(stderr, NULL);
+#endif
+}
+
+
+void
+piglit_general_init(void)
+{
+    piglit_disable_error_message_boxes();
+    piglit_set_line_buffering();
+}
+
+
  void
  piglit_set_rlimit(unsigned long lim)
  {
diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
index b30ae07..ad00817 100644
--- a/tests/util/piglit-util.h
+++ b/tests/util/piglit-util.h
@@ -414,7 +414,7 @@ void piglit_set_timeout(double seconds, enum
piglit_result timeout_result);
  void piglit_report_subtest_result(enum piglit_result result,
                    const char *format, ...) PRINTFLIKE(2, 3);
-void piglit_disable_error_message_boxes(void);
+void piglit_general_init(void);
  extern void piglit_set_rlimit(unsigned long lim);



_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to