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.
code_spécifique_watcha
Richard van der Hoff 5 years ago committed by GitHub
parent 8b786db323
commit 0a86850ba3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/8011.bugfix
  2. 1
      changelog.d/8011.misc
  3. 1
      changelog.d/8012.bugfix
  4. 10
      synapse/util/daemonize.py

@ -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.

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

@ -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.

@ -60,8 +60,14 @@ def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -
process_id = os.fork()
if process_id != 0:
# parent process
sys.exit(0)
# parent process: exit.
# 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.

Loading…
Cancel
Save