]> git.sur5r.net Git - i3/i3/blobdiff - src/sighandler.c
Merge branch 'release-4.16.1'
[i3/i3] / src / sighandler.c
index b1e7d166f7631d371e775541a78a3a541832677d..e49c30ba668efa3883ca048682481e16fb638e5b 100644 (file)
@@ -62,14 +62,13 @@ static int sighandler_backtrace(void) {
 
     char *filename = NULL;
     int suffix = 0;
-    struct stat bt;
     /* Find a unique filename for the backtrace (since the PID of i3 stays the
      * same), so that we don’t overwrite earlier backtraces. */
     do {
         FREE(filename);
         sasprintf(&filename, "%s/i3-backtrace.%d.%d.txt", tmpdir, pid_parent, suffix);
         suffix++;
-    } while (stat(filename, &bt) == 0);
+    } while (path_exists(filename));
 
     pid_t pid_gdb = fork();
     if (pid_gdb < 0) {
@@ -98,7 +97,7 @@ static int sighandler_backtrace(void) {
 
         /* We provide pipe file descriptors for stdin/stdout because gdb < 7.5
          * crashes otherwise, see
-         * http://sourceware.org/bugzilla/show_bug.cgi?id=14114 */
+         * https://sourceware.org/bugzilla/show_bug.cgi?id=14114 */
         dup2(stdin_pipe[0], STDIN_FILENO);
         dup2(stdout_pipe[1], STDOUT_FILENO);
 
@@ -130,7 +129,7 @@ static int sighandler_backtrace(void) {
     if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
         DLOG("GDB did not run properly\n");
         return -1;
-    } else if (stat(filename, &bt) == -1) {
+    } else if (!path_exists(filename)) {
         DLOG("GDB executed successfully, but no backtrace was generated\n");
         return -1;
     }
@@ -300,11 +299,13 @@ static void sighandler_handle_key_press(xcb_key_press_event_t *event) {
     }
 }
 
-void handle_signal(int sig, siginfo_t *info, void *data) {
+static void handle_signal(int sig, siginfo_t *info, void *data) {
     DLOG("i3 crashed. SIG: %d\n", sig);
 
     struct sigaction action;
     action.sa_handler = SIG_DFL;
+    action.sa_flags = 0;
+    sigemptyset(&action.sa_mask);
     sigaction(sig, &action, NULL);
     raised_signal = sig;