terminal-util: introduce vt_release() helper

This commit is contained in:
Franck Bui 2018-08-27 22:42:00 +02:00
parent ad96887a12
commit 27dafac92b
3 changed files with 19 additions and 2 deletions

View File

@ -1305,3 +1305,19 @@ int vt_restore(int fd) {
return q;
}
int vt_release(int fd, bool restore) {
assert(fd >= 0);
/* This function releases the VT by acknowledging the VT-switch signal
* sent by the kernel and optionally reset the VT in text and auto
* VT-switching modes. */
if (ioctl(fd, VT_RELDISP, 1) < 0)
return -errno;
if (restore)
return vt_restore(fd);
return 0;
}

View File

@ -155,3 +155,4 @@ int open_terminal_in_namespace(pid_t pid, const char *name, int mode);
int vt_default_utf8(void);
int vt_reset_keyboard(int fd);
int vt_restore(int fd);
int vt_release(int fd, bool restore_vt);

View File

@ -1296,9 +1296,9 @@ void session_leave_vt(Session *s) {
return;
session_device_pause_all(s);
r = ioctl(s->vtfd, VT_RELDISP, 1);
r = vt_release(s->vtfd, false);
if (r < 0)
log_debug_errno(errno, "Cannot release VT of session %s: %m", s->id);
log_debug_errno(r, "Cannot release VT of session %s: %m", s->id);
}
bool session_is_controller(Session *s, const char *sender) {