diff options
author | Erik Johnston <erik@matrix.org> | 2021-09-28 14:36:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-28 14:36:19 +0100 |
commit | 37bb93d1818eeda0d64c02cb772c8dee5596194f (patch) | |
tree | c4c390ba666bac1ff4a08c55ab93dcc77679809c | |
parent | Fixup changelog (diff) | |
download | synapse-37bb93d1818eeda0d64c02cb772c8dee5596194f.tar.xz |
Fix exception responding to request that has been closed (#10932)
Introduced in #10905
Diffstat (limited to '')
-rw-r--r-- | changelog.d/10932.feature | 1 | ||||
-rw-r--r-- | synapse/http/server.py | 14 |
2 files changed, 12 insertions, 3 deletions
diff --git a/changelog.d/10932.feature b/changelog.d/10932.feature new file mode 100644 index 0000000000..07e7b2c6a7 --- /dev/null +++ b/changelog.d/10932.feature @@ -0,0 +1 @@ +Speed up responding with large JSON objects to requests. diff --git a/synapse/http/server.py b/synapse/http/server.py index 1a50305dcf..0df1bfbeef 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -561,9 +561,17 @@ class _ByteProducer: self._iterator = iterator self._paused = False - # Register the producer and start producing data. - self._request.registerProducer(self, True) - self.resumeProducing() + try: + self._request.registerProducer(self, True) + except RuntimeError as e: + logger.info("Connection disconnected before response was written: %r", e) + + # We drop our references to data we'll not use. + self._request = None + self._iterator = iter(()) + else: + # Start producing if `registerProducer` was successful + self.resumeProducing() def _send_data(self, data: List[bytes]) -> None: """ |