Преглед на файлове

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.
Jan Klemkow преди 5 години
родител
ревизия
1dbf2dce08
променени са 1 файла, в които са добавени 4 реда и са изтрити 1 реда
  1. 4 1
      scroll.c

+ 4 - 1
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;
 }