Browse Source

🔥 Remove holding references to exceptions from dependencies with yield, as those caused memory issues before

pull/14099/head
Sebastián Ramírez 3 weeks ago
parent
commit
64a83355c7
  1. 11
      fastapi/middleware/asyncexitstack.py

11
fastapi/middleware/asyncexitstack.py

@ -1,5 +1,4 @@
from contextlib import AsyncExitStack
from typing import Optional
from starlette.types import ASGIApp, Receive, Scope, Send
@ -10,16 +9,6 @@ class AsyncExitStackMiddleware:
self.context_name = context_name
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
dependency_exception: Optional[Exception] = None
async with AsyncExitStack() as stack:
scope[self.context_name] = stack
try:
await self.app(scope, receive, send)
except Exception as e:
dependency_exception = e
raise e
if dependency_exception:
# This exception was possibly handled by the dependency but it should
# still bubble up so that the ServerErrorMiddleware can return a 500
# or the ExceptionMiddleware can catch and handle any other exceptions
raise dependency_exception

Loading…
Cancel
Save