summary refs log tree commit diff
path: root/synapse/app/_base.py
diff options
context:
space:
mode:
authorRichard van der Hoff <1389908+richvdh@users.noreply.github.com>2019-05-29 09:17:33 +0100
committerGitHub <noreply@github.com>2019-05-29 09:17:33 +0100
commitf76d407ef3d2f6c18a568eff965e12e794105a7a (patch)
tree93d6072cf1e5559c6c9a55c1103d0570456729b4 /synapse/app/_base.py
parentMerge pull request #5282 from aaronraimist/user-directory (diff)
downloadsynapse-f76d407ef3d2f6c18a568eff965e12e794105a7a.tar.xz
Fix dropped logcontexts during high outbound traffic. (#5277)
Fixes #5271.
Diffstat (limited to 'synapse/app/_base.py')
-rw-r--r--synapse/app/_base.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/synapse/app/_base.py b/synapse/app/_base.py
index 08199a5e8d..8cc990399f 100644
--- a/synapse/app/_base.py
+++ b/synapse/app/_base.py
@@ -344,15 +344,21 @@ class _LimitedHostnameResolver(object):
 
     def resolveHostName(self, resolutionReceiver, hostName, portNumber=0,
                         addressTypes=None, transportSemantics='TCP'):
-        # Note this is happening deep within the reactor, so we don't need to
-        # worry about log contexts.
-
         # We need this function to return `resolutionReceiver` so we do all the
         # actual logic involving deferreds in a separate function.
-        self._resolve(
-            resolutionReceiver, hostName, portNumber,
-            addressTypes, transportSemantics,
-        )
+
+        # even though this is happening within the depths of twisted, we need to drop
+        # our logcontext before starting _resolve, otherwise: (a) _resolve will drop
+        # the logcontext if it returns an incomplete deferred; (b) _resolve will
+        # call the resolutionReceiver *with* a logcontext, which it won't be expecting.
+        with PreserveLoggingContext():
+            self._resolve(
+                resolutionReceiver,
+                hostName,
+                portNumber,
+                addressTypes,
+                transportSemantics,
+            )
 
         return resolutionReceiver