diff --git a/changelog.d/7473.bugfix b/changelog.d/7473.bugfix new file mode 100644 index 000000000..8c9510f5e --- /dev/null +++ b/changelog.d/7473.bugfix @@ -0,0 +1 @@ +Workaround for an upstream Twisted bug that caused Synapse to become unresponsive after startup. \ No newline at end of file diff --git a/synapse/http/site.py b/synapse/http/site.py index 32feb0d96..514f2f140 100644 --- a/synapse/http/site.py +++ b/synapse/http/site.py @@ -15,6 +15,7 @@ import contextlib import logging import time +from twisted.python.failure import Failure from twisted.web.server import Request, Site from synapse.http import redact_uri @@ -190,6 +191,12 @@ class SynapseRequest(Request): Overrides twisted.web.server.Request.connectionLost to record the finish time and do logging. """ + # There is a bug in Twisted where reason is not wrapped in a Failure object + # Detect this and wrap it manually as a workaround + # More information: https://github.com/matrix-org/synapse/issues/7441 + if not isinstance(reason, Failure): + reason = Failure(reason) + self.finish_time = time.time() Request.connectionLost(self, reason)