From 60de491e3d4bdbb5a99ae4286fd135910fa918e3 Mon Sep 17 00:00:00 2001 From: Arya Rizky Date: Wed, 13 May 2026 18:35:39 +0700 Subject: [PATCH] fix: ensure response_buffer cleanup in RegularRequestHandler on cancellation When a regular (non-streaming) request is cancelled before receiving a response (e.g., client disconnect, timeout), the uid entry in response_buffer was never cleaned up, causing a memory leak. Added a finally block with pop(uid, None), matching the cleanup pattern already used by StreamingRequestHandler.stream_with_cleanup(). Fixes #452 --- src/litserve/server.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/litserve/server.py b/src/litserve/server.py index ccefb5c2..7a41842e 100644 --- a/src/litserve/server.py +++ b/src/litserve/server.py @@ -327,6 +327,7 @@ async def handle_request(self, request, request_type) -> Response: class RegularRequestHandler(BaseRequestHandler): async def handle_request(self, request, request_type) -> Response: + uid = None try: logger.debug(f"Handling request: {request}") # Prepare request @@ -360,6 +361,10 @@ async def handle_request(self, request, request_type) -> Response: logger.error(f"Unhandled exception: {e}", exc_info=True) raise HTTPException(status_code=500, detail="Internal server error") from e + finally: + if uid is not None: + self.server.response_buffer.pop(uid, None) + @staticmethod def _handle_error_response(response): """Raise HTTPException as is and rest as 500 after logging the error."""