From ac72782e61a8e08381cb66005295a4c24ed37f33 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Sun, 30 Dec 2012 15:08:06 +0100 Subject: [PATCH] [1.5.x] Fixed #16241 -- Ensured the WSGI iterable's close() is always called. Thanks Graham Dumpleton for the report. Backport of a53c474. --- django/core/servers/basehttp.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index 7387d13199..68ca0c1079 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -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"""