Mesa (master): wgl: Disable CRT message boxes when Windows system error messages boxes are disabled.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Jun 4 09:30:34 UTC 2014


Module: Mesa
Branch: master
Commit: 122e23249583d233e8a988abe95dcb5d76fa6b98
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=122e23249583d233e8a988abe95dcb5d76fa6b98

Author: José Fonseca <jfonseca at vmware.com>
Date:   Tue Jun  3 18:08:34 2014 +0100

wgl: Disable CRT message boxes when Windows system error messages boxes are disabled.

At least on MSVC we statically link against the CRT, so we must disable
the CRT message boxes if we want unattended testing.

The messages are convenient when running manually, so let them be if the
system error message boxes are not disabled.

---

 src/gallium/auxiliary/util/u_debug.c        |   32 +++++++++++++++++++++++++++
 src/gallium/auxiliary/util/u_debug.h        |    9 ++++++++
 src/gallium/state_trackers/wgl/stw_device.c |    2 ++
 3 files changed, 43 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_debug.c b/src/gallium/auxiliary/util/u_debug.c
index dc840e8..d79f31e 100644
--- a/src/gallium/auxiliary/util/u_debug.c
+++ b/src/gallium/auxiliary/util/u_debug.c
@@ -46,6 +46,12 @@
 #include <limits.h> /* CHAR_BIT */
 #include <ctype.h> /* isalnum */
 
+#ifdef _WIN32
+#include <windows.h>
+#include <stdlib.h>
+#endif
+
+
 void _debug_vprintf(const char *format, va_list ap)
 {
    static char buf[4096] = {'\0'};
@@ -64,6 +70,32 @@ void _debug_vprintf(const char *format, va_list ap)
 }
 
 
+void
+debug_disable_error_message_boxes(void)
+{
+#ifdef _WIN32
+   /* When Windows' error message boxes are disabled for this process (as is
+    * typically the case when running tests in an automated fashion) we disable
+    * CRT message boxes too.
+    */
+   UINT uMode = SetErrorMode(0);
+   SetErrorMode(uMode);
+   if (uMode & SEM_FAILCRITICALERRORS) {
+      /* Disable assertion failure message box.
+       * http://msdn.microsoft.com/en-us/library/sas1dkb2.aspx
+       */
+      _set_error_mode(_OUT_TO_STDERR);
+#ifdef _MSC_VER
+      /* Disable abort message box.
+       * http://msdn.microsoft.com/en-us/library/e631wekh.aspx
+       */
+      _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
+#endif
+   }
+#endif /* _WIN32 */
+}
+
+
 #ifdef DEBUG
 void debug_print_blob( const char *name,
                        const void *blob,
diff --git a/src/gallium/auxiliary/util/u_debug.h b/src/gallium/auxiliary/util/u_debug.h
index 9c41421..badd5e2 100644
--- a/src/gallium/auxiliary/util/u_debug.h
+++ b/src/gallium/auxiliary/util/u_debug.h
@@ -139,6 +139,15 @@ void debug_print_format(const char *msg, unsigned fmt );
 
 
 /**
+ * Disable interactive error message boxes.
+ *
+ * Should be called as soon as possible for effectiveness.
+ */
+void
+debug_disable_error_message_boxes(void);
+
+
+/**
  * Hard-coded breakpoint.
  */
 #ifdef DEBUG
diff --git a/src/gallium/state_trackers/wgl/stw_device.c b/src/gallium/state_trackers/wgl/stw_device.c
index 8f2cf9c..025dbdc 100644
--- a/src/gallium/state_trackers/wgl/stw_device.c
+++ b/src/gallium/state_trackers/wgl/stw_device.c
@@ -69,6 +69,8 @@ stw_init(const struct stw_winsys *stw_winsys)
    static struct stw_device stw_dev_storage;
    struct pipe_screen *screen;
 
+   debug_disable_error_message_boxes();
+
    debug_printf("%s\n", __FUNCTION__);
    
    assert(!stw_dev);




More information about the mesa-commit mailing list