popen: decouple logger fd from stderr
The default logger configuration writes logs to stderr. Popen implementation holds a logger fd until execve() to be able to write debug entries or information about a failure from a child. However when popen flags requires to close stderr in the child, the logger fd becomes closed: logging will fail. Another problem appears when a user want to capture stderr and tarantool's log level is set to debug (7). Since the logger uses stderr and it is fed to the parent using a pipe, the logger output will not shown on the 'real' stderr, but will be captured together with child's program debugging output. This commit duplicates a logger file descriptor that allows to close or redirect child's stderr without described side effects. See also 86ec3a5c ('popen: add logging in child process'). Areas for improvements: * Copy logger fd at module initialization time instead of copying of each popen call. Alternatives: * Extend logger to allow to accumulate log entries in a buffer. Flush the buffer from the parent process. (It is possible since vfork does not split a virtual memory space). Part of #4031 Acked-by:Cyrill Gorcunov <gorcunov@gmail.com>
Loading
Please register or sign in to comment