term: don't shutdown terminal when PTY is closed, unless --pty was used

Unless --pty has been used, we do *not* want to shutdown the terminal
when the PTY is closed by the client application; we want to wait for
the client application to actually terminate.

This was the behavior before the --pty patch.

This was changed in the --pty patch, since then, we don't *have* a
client application. That is, foot has not forked+exec:ed anything. The
only way to trigger a shutdown (from the client side) is to close the
PTY.

This patch restores the old behavior, when --pty is *not* used.

Closes #1666
This commit is contained in:
Daniel Eklöf 2024-04-05 16:22:42 +02:00
parent 88a3b54ca3
commit c7848c4e75
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 18 additions and 1 deletions

View file

@ -58,6 +58,11 @@
### Fixed
* Log-level not respected by syslog.
* Regression: terminal shutting down when the PTY is closed by the
client application, which may be earlier than when the client
application exits ([#1666][1666]).
[1666]: https://codeberg.org/dnkl/foot/issues/1666
### Security

View file

@ -364,8 +364,20 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data)
del_utmp_record(term->conf, term->reaper, term->ptmx);
fdm_del(fdm, fd);
term->ptmx = -1;
if (!term->conf->hold_at_exit)
/*
* Normally, we do *not* want to shutdown when the PTY is
* closed. Instead, we want to wait for the client application
* to exit.
*
* However, when we're using a pre-existing PTY (the --pty
* option), there _is_ no client application. That is, foot
* does *not* fork+exec anything, and thus the only way to
* shutdown is to wait for the PTY to be closed.
*/
if (term->slave < 0 && !term->conf->hold_at_exit) {
term_shutdown(term);
}
}
return true;