Merge pull request #9068 from poettering/nspawn-pty-deadlock

nspawn logging deadlock fix
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2018-05-24 16:25:22 +02:00
committed by GitHub
3 changed files with 30 additions and 11 deletions
+11 -11
View File
@@ -2597,15 +2597,12 @@ static int inner_child(
return r;
}
/* Now, explicitly close the log, so that we
* then can close all remaining fds. Closing
* the log explicitly first has the benefit
* that the logging subsystem knows about it,
* and is thus ready to be reopened should we
* need it again. Note that the other fds
* closed here are at least the locking and
* barrier fds. */
/* Now, explicitly close the log, so that we then can close all remaining fds. Closing the log explicitly first
* has the benefit that the logging subsystem knows about it, and is thus ready to be reopened should we need
* it again. Note that the other fds closed here are at least the locking and barrier fds. */
log_close();
log_set_open_when_needed(true);
(void) fdset_close_others(fds);
if (arg_start_mode == START_BOOT) {
@@ -2643,9 +2640,7 @@ static int inner_child(
exec_target = "/bin/bash, /bin/sh";
}
r = -errno;
(void) log_open();
return log_error_errno(r, "execv(%s) failed: %m", exec_target);
return log_error_errno(errno, "execv(%s) failed: %m", exec_target);
}
static int setup_sd_notify_child(void) {
@@ -2725,6 +2720,11 @@ static int outer_child(
if (terminal < 0)
return log_error_errno(terminal, "Failed to open console: %m");
/* Make sure we can continue logging to the original stderr, even if stderr points elsewhere now */
r = log_dup_console();
if (r < 0)
return log_error_errno(r, "Failed to duplicate stderr: %m");
r = rearrange_stdio(terminal, terminal, terminal); /* invalidates 'terminal' on success and failure */
if (r < 0)
return log_error_errno(r, "Failed to move console to stdin/stdout/stderr: %m");