|
|
|
|
From 735cc1af7595890d9cd567f36dabaf41fae4210e Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
|
|
|
|
Date: Mon, 11 Jul 2016 16:53:14 +0900
|
|
|
|
|
Subject: [PATCH] XIO: print C backtrace on error
|
|
|
|
|
|
|
|
|
|
For debugging purpose, show C backtrace with XIO
|
|
|
|
|
error happens.
|
|
|
|
|
---
|
|
|
|
|
driver/xscreensaver.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
1 file changed, 41 insertions(+)
|
|
|
|
|
|
|
|
|
|
diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c
|
|
|
|
|
index 76969f2..04c2669 100644
|
|
|
|
|
--- a/driver/xscreensaver.c
|
|
|
|
|
+++ b/driver/xscreensaver.c
|
|
|
|
|
@@ -148,10 +148,15 @@
|
|
|
|
|
# include "config.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+#include <features.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <ctype.h>
|
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
|
|
|
|
|
|
+#ifdef __GNU_LIBRARY__
|
|
|
|
|
+#include <execinfo.h>
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
#ifdef ENABLE_NLS
|
|
|
|
|
# include <locale.h>
|
|
|
|
|
# include <libintl.h>
|
|
|
|
|
@@ -504,6 +509,41 @@ startup_ehandler (String name, String type, String class,
|
|
|
|
|
exit (1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+static void
|
|
|
|
|
+show_cstyle_backtrace(void)
|
|
|
|
|
+{
|
|
|
|
|
+#ifdef __GNU_LIBRARY__
|
|
|
|
|
+ void *bt_array[128];
|
|
|
|
|
+ size_t bt_size;
|
|
|
|
|
+
|
|
|
|
|
+ bt_size = backtrace(bt_array, countof(bt_array));
|
|
|
|
|
+ fprintf(stderr, "C backtrace:\n");
|
|
|
|
|
+ backtrace_symbols_fd(bt_array, bt_size, STDERR_FILENO);
|
|
|
|
|
+#endif
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static int (*default_xio_ehandler)(Display *dpy) = 0;
|
|
|
|
|
+
|
|
|
|
|
+static int
|
|
|
|
|
+show_debug_info_xio_ehandler(Display *dpy)
|
|
|
|
|
+{
|
|
|
|
|
+ show_cstyle_backtrace();
|
|
|
|
|
+ if (default_xio_ehandler){
|
|
|
|
|
+ (*default_xio_ehandler)(dpy);
|
|
|
|
|
+ }
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+hack_IOErrorHandler(void)
|
|
|
|
|
+{
|
|
|
|
|
+#ifdef __GNU_LIBRARY__
|
|
|
|
|
+ XIOErrorHandler old_handler;
|
|
|
|
|
+ old_handler = XSetIOErrorHandler(show_debug_info_xio_ehandler);
|
|
|
|
|
+ default_xio_ehandler = old_handler;
|
|
|
|
|
+#endif
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
/* The zillions of initializations.
|
|
|
|
|
*/
|
|
|
|
|
@@ -1570,6 +1610,7 @@ main (int argc, char **argv)
|
|
|
|
|
|
|
|
|
|
initialize_stderr (si);
|
|
|
|
|
handle_signals (si);
|
|
|
|
|
+ hack_IOErrorHandler();
|
|
|
|
|
|
|
|
|
|
make_splash_dialog (si);
|
|
|
|
|
|
|
|
|
|
--
|
|
|
|
|
2.7.4
|
|
|
|
|
|