Skip to content

Commit 0e6540b

Browse files
committed
When closing an HTTPConnection, also clear a circular reference to self.
This reference could cause garbage collection of the connection object to be delayed. Closes tornadoweb#586.
1 parent 302c503 commit 0e6540b

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

tornado/httpserver.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@ def __init__(self, stream, address, request_callback, no_keep_alive=False,
172172
self.stream.read_until(b("\r\n\r\n"), self._header_callback)
173173
self._write_callback = None
174174

175+
def close(self):
176+
self.stream.close()
177+
# Remove this reference to self, which would otherwise cause a
178+
# cycle and delay garbage collection of this connection.
179+
self._header_callback = None
180+
175181
def write(self, chunk, callback=None):
176182
"""Writes a chunk of output to the stream."""
177183
assert self._request, "Request closed"
@@ -218,7 +224,7 @@ def _finish_request(self):
218224
self._request = None
219225
self._request_finished = False
220226
if disconnect:
221-
self.stream.close()
227+
self.close()
222228
return
223229
self.stream.read_until(b("\r\n\r\n"), self._header_callback)
224230

@@ -263,7 +269,7 @@ def _on_headers(self, data):
263269
except _BadRequestException, e:
264270
logging.info("Malformed HTTP request from %s: %s",
265271
self.address[0], e)
266-
self.stream.close()
272+
self.close()
267273
return
268274

269275
def _on_request_body(self, data):

0 commit comments

Comments
 (0)