diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-07-03 13:40:45 +0100 |
---|---|---|
committer | Amber Brown <hawkowl@atleastfornow.net> | 2019-07-03 22:40:45 +1000 |
commit | cb8d568cf90bb0f5f07ee9e7e6796ad7cd83361f (patch) | |
tree | 4eb8bdaf3e9a283b41de7b55405727d75b840c66 /synapse/util | |
parent | 1.1.0rc2 (diff) | |
download | synapse-cb8d568cf90bb0f5f07ee9e7e6796ad7cd83361f.tar.xz |
Fix 'utime went backwards' errors on daemonization. (#5609)
* Fix 'utime went backwards' errors on daemonization. Fixes #5608 * remove spurious debug
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/logcontext.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/synapse/util/logcontext.py b/synapse/util/logcontext.py index 9e1b537804..30dfa1d6b2 100644 --- a/synapse/util/logcontext.py +++ b/synapse/util/logcontext.py @@ -52,6 +52,15 @@ except Exception: return None +# get an id for the current thread. +# +# threading.get_ident doesn't actually return an OS-level tid, and annoyingly, +# on Linux it actually returns the same value either side of a fork() call. However +# we only fork in one place, so it's not worth the hoop-jumping to get a real tid. +# +get_thread_id = threading.get_ident + + class ContextResourceUsage(object): """Object for tracking the resources used by a log context @@ -225,7 +234,7 @@ class LoggingContext(object): # became active. self.usage_start = None - self.main_thread = threading.current_thread() + self.main_thread = get_thread_id() self.request = None self.tag = "" self.alive = True @@ -318,7 +327,7 @@ class LoggingContext(object): record.request = self.request def start(self): - if threading.current_thread() is not self.main_thread: + if get_thread_id() != self.main_thread: logger.warning("Started logcontext %s on different thread", self) return @@ -328,7 +337,7 @@ class LoggingContext(object): self.usage_start = get_thread_resource_usage() def stop(self): - if threading.current_thread() is not self.main_thread: + if get_thread_id() != self.main_thread: logger.warning("Stopped logcontext %s on different thread", self) return @@ -355,7 +364,7 @@ class LoggingContext(object): # If we are on the correct thread and we're currently running then we # can include resource usage so far. - is_main_thread = threading.current_thread() is self.main_thread + is_main_thread = get_thread_id() == self.main_thread if self.alive and self.usage_start and is_main_thread: utime_delta, stime_delta = self._get_cputime() res.ru_utime += utime_delta |