diff options
author | Sean Quah <8349537+squahtx@users.noreply.github.com> | 2022-05-10 20:39:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-10 20:39:05 +0100 |
commit | c997bfb926a29f0ec894fca889cc5eae603f4027 (patch) | |
tree | 05d4fde4ecef6b206b36bfa950db08b2ba36d662 /synapse/http/server.py | |
parent | Fix incorrect type hint in filtering code. (#12695) (diff) | |
download | synapse-c997bfb926a29f0ec894fca889cc5eae603f4027.tar.xz |
Capture the `Deferred` for request cancellation in `_AsyncResource` (#12694)
All async request processing goes through `_AsyncResource`, so this is the only place where a `Deferred` needs to be captured for cancellation. Unfortunately, the same isn't true for determining whether a request can be cancelled. Each of `RestServlet`, `BaseFederationServlet`, `DirectServe{Html,Json}Resource` and `ReplicationEndpoint` have different wrappers around the method doing the request handling and they all need to be handled separately. Signed-off-by: Sean Quah <seanq@element.io>
Diffstat (limited to 'synapse/http/server.py')
-rw-r--r-- | synapse/http/server.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/synapse/http/server.py b/synapse/http/server.py index 8c96f2196e..4b4debc5cd 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -344,7 +344,9 @@ class _AsyncResource(resource.Resource, metaclass=abc.ABCMeta): def render(self, request: SynapseRequest) -> int: """This gets called by twisted every time someone sends us a request.""" - defer.ensureDeferred(self._async_render_wrapper(request)) + request.render_deferred = defer.ensureDeferred( + self._async_render_wrapper(request) + ) return NOT_DONE_YET @wrap_async_request_handler |