From: Michael Stapelberg Date: Tue, 11 Sep 2012 10:57:53 +0000 (+0200) Subject: sighandler: provide gdb with pipe stdin/stdout fds (necessary for gdb < 7.5) X-Git-Tag: 4.3~16 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9d8a4ebc6182ae5ef6e873906e614a50d6cf9c84;p=i3%2Fi3 sighandler: provide gdb with pipe stdin/stdout fds (necessary for gdb < 7.5) --- diff --git a/src/sighandler.c b/src/sighandler.c index fe8c9f64..5d987865 100644 --- a/src/sighandler.c +++ b/src/sighandler.c @@ -62,6 +62,11 @@ static int backtrace(void) { return -1; } else if (pid_gdb == 0) { /* child */ + int stdin_pipe[2], + stdout_pipe[2]; + + pipe(stdin_pipe); + pipe(stdout_pipe); /* close standard streams in case i3 is started from a terminal; gdb * needs to run without controlling terminal for it to work properly in @@ -70,6 +75,12 @@ static int backtrace(void) { close(STDOUT_FILENO); close(STDERR_FILENO); + /* We provide pipe file descriptors for stdin/stdout because gdb < 7.5 + * crashes otherwise, see + * http://sourceware.org/bugzilla/show_bug.cgi?id=14114 */ + dup2(stdin_pipe[0], STDIN_FILENO); + dup2(stdout_pipe[1], STDOUT_FILENO); + char *pid_s = NULL; sasprintf(&pid_s, "%d", pid_parent);