[1.5.x] Fixed #16241 -- Ensured the WSGI iterable's close() is always called.

Thanks Graham Dumpleton for the report.

Backport of a53c474.
This commit is contained in:
Aymeric Augustin 2012-12-30 15:08:06 +01:00
parent 814c3b2e2a
commit ac72782e61
1 changed files with 11 additions and 0 deletions

View File

@ -109,6 +109,17 @@ class ServerHandler(simple_server.ServerHandler, object):
super(ServerHandler, self).error_output(environ, start_response)
return ['\n'.join(traceback.format_exception(*sys.exc_info()))]
# Backport of http://hg.python.org/cpython/rev/d5af1b235dab. See #16241.
# This can be removed when support for Python <= 2.7.3 is deprecated.
def finish_response(self):
try:
if not self.result_is_file() or not self.sendfile():
for data in self.result:
self.write(data)
self.finish_content()
finally:
self.close()
class WSGIServer(simple_server.WSGIServer, object):
"""BaseHTTPServer that implements the Python WSGI protocol"""