fix race condition between sigwinch and sigchld - scroll - scrollbackbuffer pro… | |
git clone git://git.suckless.org/scroll | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 1dbf2dce08892df710645ddbd2ce12759ec95078 | |
parent 58c58743d8f391ef0e4776fc46d92c824795d162 | |
Author: Jan Klemkow <[email protected]> | |
Date: Thu, 30 Apr 2020 22:12:50 +0200 | |
fix race condition between sigwinch and sigchld | |
sigwinch died if it tries to set the window size | |
to a file descriptor of an exited child. Thus, | |
we just ignore this error in that situation. | |
Diffstat: | |
M scroll.c | 5 ++++- | |
1 file changed, 4 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/scroll.c b/scroll.c | |
@@ -96,8 +96,11 @@ sigwinch(int sig) | |
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == -1) | |
die("ioctl:"); | |
- if (ioctl(mfd, TIOCSWINSZ, &ws) == -1) | |
+ if (ioctl(mfd, TIOCSWINSZ, &ws) == -1) { | |
+ if (errno == EBADF) /* child already exited */ | |
+ return; | |
die("ioctl:"); | |
+ } | |
kill(-child, SIGWINCH); | |
doredraw = true; | |
} |