From 9d8a4ebc6182ae5ef6e873906e614a50d6cf9c84 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 11 Sep 2012 12:57:53 +0200 Subject: [PATCH] sighandler: provide gdb with pipe stdin/stdout fds (necessary for gdb < 7.5) --- src/sighandler.c | 11 +++++++++++ 1 file changed, 11 insertions(+) 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);