From 52aefd50860f9b44f48a9b465d42f26faa4eb84f Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Thu, 7 Oct 2021 12:37:10 +0200 Subject: [PATCH] Catch AttributeErrors when calling registerProducer (#10995) Looks like the wrong exception type was caught in #10932. --- changelog.d/10995.bugfix | 1 + synapse/http/server.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changelog.d/10995.bugfix diff --git a/changelog.d/10995.bugfix b/changelog.d/10995.bugfix new file mode 100644 index 000000000..3eef96f3d --- /dev/null +++ b/changelog.d/10995.bugfix @@ -0,0 +1 @@ +Correct a bugfix introduced in Synapse v1.44.0 that wouldn't catch every error of the connection breaks before a response could be written to it. diff --git a/synapse/http/server.py b/synapse/http/server.py index 0df1bfbee..897ba5e45 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -563,7 +563,10 @@ class _ByteProducer: try: self._request.registerProducer(self, True) - except RuntimeError as e: + except AttributeError as e: + # Calling self._request.registerProducer might raise an AttributeError since + # the underlying Twisted code calls self._request.channel.registerProducer, + # however self._request.channel will be None if the connection was lost. logger.info("Connection disconnected before response was written: %r", e) # We drop our references to data we'll not use.