X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fsighandler.c;h=a458b4a6d4fe19855af0fc25b7040647386f62e7;hb=00ee86de79800d80cacc014b53b47585eacdb90b;hp=c951ea9d0c1abdd050661d9391518f12c357c00a;hpb=e713283605a8636541cc91987436abce8902bcf8;p=i3%2Fi3 diff --git a/src/sighandler.c b/src/sighandler.c index c951ea9d..a458b4a6 100644 --- a/src/sighandler.c +++ b/src/sighandler.c @@ -52,7 +52,15 @@ static int backtrace(void) { pid_t pid_parent = getpid(); char *filename = NULL; - sasprintf(&filename, "%s/i3-backtrace.%d.txt", tmpdir, pid_parent); + 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); pid_t pid_gdb = fork(); if (pid_gdb < 0) { @@ -101,7 +109,6 @@ static int backtrace(void) { exit(1); } int status = 0; - struct stat bt; waitpid(pid_gdb, &status, 0); @@ -110,7 +117,7 @@ static int backtrace(void) { DLOG("GDB did not run properly\n"); return -1; } else if (stat(filename, &bt) == -1) { - DLOG("GDB executed succesfully, but no backtrace was generated\n"); + DLOG("GDB executed successfully, but no backtrace was generated\n"); return -1; } return 1;