From 27c067ceeb6a6cfdaf40d4d65a82087d21154b26 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 11 Jul 2024 16:28:08 +0200 Subject: [PATCH] execute: reorder "destructive" tty reset operations Let's make sure to first issue the non-destructive operations, then issue the hangup (for which we need the fd), then try to disallocate the device (for which we don't need it anymore). --- src/core/execute.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index e821133eea..8982af10aa 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -145,7 +145,7 @@ int exec_context_apply_tty_size( void exec_context_tty_reset(const ExecContext *context, const ExecParameters *p) { _cleanup_close_ int _fd = -EBADF, lock_fd = -EBADF; - int fd; + int fd, r; assert(context); @@ -172,13 +172,19 @@ void exec_context_tty_reset(const ExecContext *context, const ExecParameters *p) else if (lock_fd < 0) log_warning_errno(lock_fd, "Failed to lock /dev/console, proceeding without lock: %m"); - if (context->tty_vhangup) - (void) terminal_vhangup_fd(fd); - if (context->tty_reset) (void) terminal_reset_defensive(fd, /* switch_to_text= */ true); - (void) exec_context_apply_tty_size(context, fd, fd, path); + r = exec_context_apply_tty_size(context, fd, fd, path); + if (r < 0) + log_debug_errno(r, "Failed to configure TTY dimensions, ignoring: %m"); + + if (context->tty_vhangup) + (void) terminal_vhangup_fd(fd); + + /* We don't need the fd anymore now, and it potentially points to a hungup TTY anyway, let's close it + * hence. */ + _fd = safe_close(_fd); if (context->tty_vt_disallocate && path) (void) vt_disallocate(path); -- 2.25.1