mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-25 23:21:33 +03:00
logind: get a fresh file descriptor to clean up a VT
When the controlling process exits, any existing file descriptors for that FD will be marked as hung-up and ioctls on them will file with EIO. To work around this, open a new file descriptor for the VT we want to clean up. Thanks to Ray Strode for help in sorting out the problem and coming up with a fix! https://github.com/systemd/systemd/issues/989
This commit is contained in:
parent
2235695335
commit
128df4cfe9
@ -1050,7 +1050,18 @@ void session_restore_vt(Session *s) {
|
||||
int vt, kb = K_XLATE;
|
||||
struct vt_mode mode = { 0 };
|
||||
|
||||
/* We need to get a fresh handle to the virtual terminal,
|
||||
* since the old file-descriptor is potentially in a hung-up
|
||||
* state after the controlling process exited; we do a
|
||||
* little dance to avoid having the terminal be available
|
||||
* for reuse before we've cleaned it up.
|
||||
*/
|
||||
int old_fd = s->vtfd;
|
||||
s->vtfd = -1;
|
||||
|
||||
vt = session_open_vt(s);
|
||||
safe_close(old_fd);
|
||||
|
||||
if (vt < 0)
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user