From: Lennart Poettering Date: Thu, 11 Jul 2024 14:28:08 +0000 (+0200) Subject: execute: reorder "destructive" tty reset operations X-Git-Tag: v257-rc1~873^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27c067ceeb6a6cfdaf40d4d65a82087d21154b26;p=thirdparty%2Fsystemd.git 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). --- diff --git a/src/core/execute.c b/src/core/execute.c index e821133eea1..8982af10aa2 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);