bpo-43867: multiprocessing Server catchs SystemExit (GH-25441)

The multiprocessing Server class now explicitly catchs SystemExit and
closes the client connection in this case. It happens when the
Server.serve_client() method reachs the end of file (EOF).
This commit is contained in:
Victor Stinner 2021-04-16 19:42:34 +02:00 committed by GitHub
parent 62ec638648
commit 7c29ae1f05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 6 deletions

View file

@ -192,11 +192,8 @@ class Server(object):
t.daemon = True
t.start()
def handle_request(self, c):
'''
Handle a new connection
'''
funcname = result = request = None
def _handle_request(self, c):
request = None
try:
connection.deliver_challenge(c, self.authkey)
connection.answer_challenge(c, self.authkey)
@ -213,6 +210,7 @@ class Server(object):
msg = ('#TRACEBACK', format_exc())
else:
msg = ('#RETURN', result)
try:
c.send(msg)
except Exception as e:
@ -224,7 +222,17 @@ class Server(object):
util.info(' ... request was %r', request)
util.info(' ... exception was %r', e)
c.close()
def handle_request(self, conn):
'''
Handle a new connection
'''
try:
self._handle_request(conn)
except SystemExit:
# Server.serve_client() calls sys.exit(0) on EOF
pass
finally:
conn.close()
def serve_client(self, conn):
'''

View file

@ -0,0 +1,3 @@
The :mod:`multiprocessing` ``Server`` class now explicitly catchs
:exc:`SystemExit` and closes the client connection in this case. It happens
when the ``Server.serve_client()`` method reachs the end of file (EOF).