summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2016-05-09 17:31:17 +0200
committerRalf Habacker <ralf.habacker@freenet.de>2016-05-09 21:49:22 +0200
commit5ef167c1399499cf12d5800855cbe80f5b2439b6 (patch)
tree4c7cbfedb12646b58d8480ee9564d79b826ba2c6
parentcdf9fd02d22e81b92046f42d52db01b5a1bd79c7 (diff)
downloaddbus-5ef167c1399499cf12d5800855cbe80f5b2439b6.tar.gz
Suppress Windows popups and jit debugger when app crashes with exception.
Based on a patch from Yiyang Fei. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=95155 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r--test/test-segfault.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/test-segfault.c b/test/test-segfault.c
index c062ce1c..7e2e82a1 100644
--- a/test/test-segfault.c
+++ b/test/test-segfault.c
@@ -13,11 +13,36 @@
#include <sys/prctl.h>
#endif
+#ifdef DBUS_WIN
+#include <windows.h>
+
+int
+exception_handler(LPEXCEPTION_POINTERS p);
+
+/* Explicit Windows exception handlers needed to supress OS popups */
+int
+exception_handler(LPEXCEPTION_POINTERS p)
+{
+ fprintf(stderr, "test-segfault: raised fatal exception as intended\n");
+ ExitProcess(0xc0000005);
+}
+#endif
+
int
main (int argc, char **argv)
{
char *p;
+#ifdef DBUS_WIN
+ /* Disable Windows popup dialog when an app crashes so that app quits
+ * immediately with error code instead of waiting for user to dismiss
+ * the dialog. */
+ DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
+ SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
+ /* Disable "just in time" debugger */
+ SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&exception_handler);
+#endif
+
#if HAVE_SETRLIMIT
/* No core dumps please, we know we crashed. */
struct rlimit r = { 0, };