From dfd566511e4d374807e3dfd4c69c506004c3af13 Mon Sep 17 00:00:00 2001 From: Axel Wagner Date: Mon, 14 Mar 2011 09:17:06 +0100 Subject: [PATCH] Bugfix: Don't segfault, if child was killed --- i3bar/src/child.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/i3bar/src/child.c b/i3bar/src/child.c index 795a10d3..890dce29 100644 --- a/i3bar/src/child.c +++ b/i3bar/src/child.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -35,11 +36,13 @@ char *statusline_buffer = NULL; * */ void cleanup() { - ev_io_stop(main_loop, stdin_io); - ev_child_stop(main_loop, child_sig); - FREE(stdin_io); - FREE(child_sig); - FREE(statusline_buffer); + if (stdin_io != NULL) { + ev_io_stop(main_loop, stdin_io); + ev_child_stop(main_loop, child_sig); + FREE(stdin_io); + FREE(child_sig); + FREE(statusline_buffer); + } } /* @@ -174,8 +177,11 @@ void kill_child() { if (child_pid != 0) { kill(child_pid, SIGCONT); kill(child_pid, SIGTERM); + int status; + waitpid(child_pid, &status, 0); + child_pid = 0; + cleanup(); } - cleanup(); } /*