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