diff options
author | Guido van Rossum <guido@python.org> | 2001-10-23 21:42:45 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-10-23 21:42:45 (GMT) |
commit | 83c3281826316e2a1c1e9b682c5d303be5df79f4 (patch) | |
tree | 7c2738d91782f1c6dfeb132903ab4f5995024284 /Lib | |
parent | 00ebd46dfc8623ac0bd436e5d0c47b53cac29fb9 (diff) | |
download | cpython-83c3281826316e2a1c1e9b682c5d303be5df79f4.zip cpython-83c3281826316e2a1c1e9b682c5d303be5df79f4.tar.gz cpython-83c3281826316e2a1c1e9b682c5d303be5df79f4.tar.bz2 |
Apply the first chunk of the second patch from SF bug #471720:
ThreadingMixIn/TCPServer forgets close (Max Neunhöffer).
This ensures that handle_error() and close_request() are called when
an error occurs in the thread.
(I am not applying the second chunk of the patch, which moved the
finish() call into the finally clause in BaseRequestHandler's __init__
method; that would be a semantic change that I cannot accept at this
point - the data would be sent even if the handler raised an
exception.)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/SocketServer.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py index 5128e17..7e1e27c 100644 --- a/Lib/SocketServer.py +++ b/Lib/SocketServer.py @@ -449,9 +449,17 @@ class ThreadingMixIn: """Mix-in class to handle each request in a new thread.""" def process_request_thread(self, request, client_address): - """Same as in BaseServer but as a thread.""" - self.finish_request(request, client_address) - self.close_request(request) + """Same as in BaseServer but as a thread. + + In addition, exception handling is done here. + + """ + try: + self.finish_request(request, client_address) + self.close_request(request) + except: + self.handle_error(request, client_address) + self.close_request(request) def process_request(self, request, client_address): """Start a new thread to process the request.""" |