[Mesa-dev] [PATCH] wgl: Disable CRT message boxes when Windows system error messages boxes are disabled.

Brian Paul brianp at vmware.com
Tue Jun 3 11:40:47 PDT 2014


I might replace "boxes" with "dialogs" but it's not a big deal.  I guess 
the same comment would apply to the piglit patch.

Reviewed-by: Brian Paul <brianp at vmware.com>


On 06/03/2014 11:27 AM, jfonseca at vmware.com wrote:
> From: José Fonseca <jfonseca at vmware.com>
>
> At least on MSVC we statically link against the CRT, so we must disable
> the CRT message boxes if we want to attended 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-dev mailing list