Fix sigchld - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 07ce96a3a0f4a650933f5f586082cbf2064ea2c1
 (DIR) parent 190b94c7a2a7bb2f5d55cbb6eb1779fd042c6467
 (HTM) Author: Jochen Sprickerhof <dwm@jochen.sprickerhof.de>
       Date:   Wed, 22 Apr 2015 17:22:34 +0200
       
       Fix sigchld
       
       Only wait for termination of the shell.
       
       Diffstat:
         st.c                                |       6 +++++-
       
       1 file changed, 5 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -1238,10 +1238,14 @@ execsh(void) {
        void
        sigchld(int a) {
                int stat, ret;
       +        pid_t p;
        
       -        if(waitpid(pid, &stat, 0) < 0)
       +        if((p = waitpid(pid, &stat, WNOHANG)) < 0)
                        die("Waiting for pid %hd failed: %s\n", pid, strerror(errno));
        
       +        if(pid != p)
       +                return;
       +
                ret = WIFEXITED(stat) ? WEXITSTATUS(stat) : EXIT_FAILURE;
                if (ret != EXIT_SUCCESS)
                        die("child finished with error '%d'\n", stat);