diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2020-08-05 09:35:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-05 09:35:17 +0100 |
commit | 0a86850ba37470837cbd19b33679763851c13b73 (patch) | |
tree | 49656886049260be0da00c5aae2f20dd31457476 | |
parent | bug report template: move comments into comment (#8030) (diff) | |
download | synapse-0a86850ba37470837cbd19b33679763851c13b73.tar.xz |
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.
-rw-r--r-- | changelog.d/8011.bugfix | 1 | ||||
-rw-r--r-- | changelog.d/8011.misc | 1 | ||||
-rw-r--r-- | changelog.d/8012.bugfix | 1 | ||||
-rw-r--r-- | synapse/util/daemonize.py | 10 |
4 files changed, 10 insertions, 3 deletions
diff --git a/changelog.d/8011.bugfix b/changelog.d/8011.bugfix new file mode 100644 index 0000000000..c673040de9 --- /dev/null +++ b/changelog.d/8011.bugfix @@ -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. diff --git a/changelog.d/8011.misc b/changelog.d/8011.misc deleted file mode 100644 index dfeb4bdaf1..0000000000 --- a/changelog.d/8011.misc +++ /dev/null @@ -1 +0,0 @@ -Replace daemonize library with a local implementation. diff --git a/changelog.d/8012.bugfix b/changelog.d/8012.bugfix new file mode 100644 index 0000000000..c673040de9 --- /dev/null +++ b/changelog.d/8012.bugfix @@ -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. diff --git a/synapse/util/daemonize.py b/synapse/util/daemonize.py index a7913fa1af..23393cf49b 100644 --- a/synapse/util/daemonize.py +++ b/synapse/util/daemonize.py @@ -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. |