Merge branch 'drain-pty-when-client-terminates'

This commit is contained in:
Daniel Eklöf 2021-04-08 10:41:05 +02:00
commit 0af7916fcc
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 10 additions and 4 deletions

View file

@ -42,6 +42,7 @@
* OSC-4/104 out-of-bounds accesses to the color table. This was the
reason pywal turned foot windows transparent
(https://codeberg.org/dnkl/foot/issues/434).
* PTY not being drained when the client application terminates.
### Security

View file

@ -230,15 +230,20 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data)
uint8_t buf[24 * 1024];
ssize_t count = sizeof(buf);
const size_t max_iterations = 10;
const size_t max_iterations = !hup ? 10 : (size_t)-1ll;
for (size_t i = 0; i < max_iterations && pollin && count == sizeof(buf); i++) {
for (size_t i = 0; i < max_iterations && pollin; i++) {
xassert(pollin);
count = read(term->ptmx, buf, sizeof(buf));
if (count < 0) {
if (errno == EAGAIN)
return true;
if (errno == EAGAIN || errno == EIO) {
/*
* EAGAIN: no more to read - FDM will trigger us again
* EIO: assume PTY was closed - we already have, or will get, a EPOLLHUP
*/
break;
}
LOG_ERRNO("failed to read from pseudo terminal");
return false;