nspawn: make sure our container PID 1 keeps logging to the original stderr as long...
authorLennart Poettering <lennart@poettering.net>
Tue, 22 May 2018 14:52:50 +0000 (16:52 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 22 May 2018 14:52:50 +0000 (16:52 +0200)
commit17cac366ae5f31d07fc245bef702e6ec953e4cab
tree1c9a65e5156702937169c8f332936bac142dafdd
parent8ca082b49ac816457dc258c297a96b2f623b152e
nspawn: make sure our container PID 1 keeps logging to the original stderr as long as possible

If we log to the pty that is configured as stdin/stdout/stderr of the
container too early we risk filling it up in full before we start
processing the pty from the parent process, resulting in deadlocks.
Let's hence keep a copy of the original tty we were started on before
setting up stdin/stdout/stderr, so that we can log to it, and keep using
it as long as we can.

Since the kernel's pty internal buffer is pretty small this actually
triggered deadlocks when we debug logged at lot from nspawn's child
processes, see: https://github.com/systemd/systemd/pull/9024#issuecomment-390403674

With this change we won't use the pty at all, only the actual payload we
start will, and hence we won't deadlock on it, ever.
src/basic/log.c
src/basic/log.h
src/nspawn/nspawn.c