avoid race condition with sigwinch - scroll - scrollbackbuffer program for st
 (HTM) git clone git://git.suckless.org/scroll
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 6d1a3bbbb870a303b47f790ba76146e61a4c7b6a
 (DIR) parent 6b13c34098454e6e667aca6bf37c47feedc0d185
 (HTM) Author: Jan Klemkow <j.klemkow@wemelug.de>
       Date:   Tue, 28 Apr 2020 21:20:42 +0200
       
       avoid race condition with sigwinch
       
       if sigwinch comes before forking the child process,
       we are traped into an endless loop.  because, the
       variable child is zero.  Thus, we propagating sigwinch
       to ourself in the signal handler.
       
       Diffstat:
         M scroll.c                            |       6 +++---
       
       1 file changed, 3 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/scroll.c b/scroll.c
       @@ -428,9 +428,6 @@ main(int argc, char *argv[])
                if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == -1)
                        die("ioctl:");
        
       -        if (signal(SIGWINCH, sigwinch) == SIG_ERR)
       -                die("signal:");
       -
                child = forkpty(&mfd, NULL, &dfl, &ws);
                if (child == -1)
                        die("forkpty:");
       @@ -457,6 +454,9 @@ main(int argc, char *argv[])
                        die("pledge:");
        #endif
        
       +        if (signal(SIGWINCH, sigwinch) == SIG_ERR)
       +                die("signal:");
       +
                struct termios new = dfl;
                cfmakeraw(&new);
                new.c_cc[VMIN ] = 1;        /* return read if at least one byte in buffer */