From: Ben Darnell Date: Fri, 5 Nov 2010 18:19:18 +0000 (-0700) Subject: Capture StackContext explicitly in HTTPConnection to prevent leaks from X-Git-Tag: v1.2.0~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ec87c2ba25e202fbce5ff1f35184fcbabba26f3;p=thirdparty%2Ftornado.git Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next. --- diff --git a/tornado/httpserver.py b/tornado/httpserver.py index 9d73f3264..d13732833 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")