Stop the parent process flushing the logs on exit (#8012)

This solves the problem that the first few lines are logged twice on matrix.org. Hopefully the comments explain it.
This commit is contained in:
Richard van der Hoff 2020-08-05 09:35:17 +01:00 committed by GitHub
parent 8b786db323
commit 0a86850ba3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 3 deletions

1
changelog.d/8011.bugfix Normal file
View file

@ -0,0 +1 @@
Fix a long-standing bug which caused two copies of some log lines to be written when synctl was used along with a MemoryHandler logger.

View file

@ -1 +0,0 @@
Replace daemonize library with a local implementation.

1
changelog.d/8012.bugfix Normal file
View file

@ -0,0 +1 @@
Fix a long-standing bug which caused two copies of some log lines to be written when synctl was used along with a MemoryHandler logger.

View file

@ -60,8 +60,14 @@ def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -
process_id = os.fork() process_id = os.fork()
if process_id != 0: if process_id != 0:
# parent process # parent process: exit.
sys.exit(0)
# we use os._exit to avoid running the atexit handlers. In particular, that
# means we don't flush the logs. This is important because if we are using
# a MemoryHandler, we could have logs buffered which are now buffered in both
# the main and the child process, so if we let the main process flush the logs,
# we'll get two copies.
os._exit(0)
# This is the child process. Continue. # This is the child process. Continue.