Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists * Add log when closing HTTP loop because of shutdown * Add unit test
This commit is contained in:
@@ -148,6 +148,12 @@ class Http(metaclass=TouchUpMeta):
|
||||
await self.response.send(end_stream=True)
|
||||
except CancelledError:
|
||||
# Write an appropriate response before exiting
|
||||
if not self.protocol.transport:
|
||||
logger.info(
|
||||
f"Request: {self.request.method} {self.request.url} "
|
||||
"stopped. Transport is closed."
|
||||
)
|
||||
return
|
||||
e = self.exception or ServiceUnavailable("Cancelled")
|
||||
self.exception = None
|
||||
self.keep_alive = False
|
||||
|
||||
@@ -109,7 +109,7 @@ class HttpProtocol(SanicProtocol, metaclass=TouchUpMeta):
|
||||
except Exception:
|
||||
error_logger.exception("protocol.connection_task uncaught")
|
||||
finally:
|
||||
if self.app.debug and self._http:
|
||||
if self.app.debug and self._http and self.transport:
|
||||
ip = self.transport.get_extra_info("peername")
|
||||
error_logger.error(
|
||||
"Connection lost before response written"
|
||||
|
||||
Reference in New Issue
Block a user