From 9ec87c2ba25e202fbce5ff1f35184fcbabba26f3 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Fri, 5 Nov 2010 11:19:18 -0700 Subject: [PATCH] Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next. --- tornado/httpserver.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tornado/httpserver.py b/tornado/httpserver.py index 9d73f326..d1373283 100644 --- a/tornado/httpserver.py +++ b/tornado/httpserver.py @@ -27,6 +27,7 @@ import urlparse from tornado import httputil from tornado import ioloop from tornado import iostream +from tornado import stack_context try: import fcntl @@ -282,7 +283,10 @@ class HTTPConnection(object): self.xheaders = xheaders self._request = None self._request_finished = False - self.stream.read_until("\r\n\r\n", self._on_headers) + # Save stack context here, outside of any request. This keeps + # contexts from one request from leaking into the next. + self._header_callback = stack_context.wrap(self._on_headers) + self.stream.read_until("\r\n\r\n", self._header_callback) def write(self, chunk): assert self._request, "Request closed" @@ -316,7 +320,7 @@ class HTTPConnection(object): if disconnect: self.stream.close() return - self.stream.read_until("\r\n\r\n", self._on_headers) + self.stream.read_until("\r\n\r\n", self._header_callback) def _on_headers(self, data): eol = data.find("\r\n")