]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Capture StackContext explicitly in HTTPConnection to prevent leaks from
authorBen Darnell <ben@bendarnell.com>
Fri, 5 Nov 2010 18:19:18 +0000 (11:19 -0700)
committerBen Darnell <ben@bendarnell.com>
Fri, 5 Nov 2010 18:19:18 +0000 (11:19 -0700)
one request to the next.

tornado/httpserver.py

index 9d73f3264a51685cd61ad4a702212a3d8a862926..d13732833011049d2cc50800e81761e50157b8c2 100644 (file)
@@ -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")