bpo-35727: Use exit code 0 on sys.exit() in multiprocessing.Process. (GH-11538)

This commit is contained in:
Christopher Hunt 2020-02-21 17:33:04 +08:00 committed by GitHub
parent baf29b2216
commit c2ac4cf040
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 11 deletions

View File

@ -317,12 +317,12 @@ class BaseProcess(object):
finally:
util._exit_function()
except SystemExit as e:
if not e.args:
exitcode = 1
elif isinstance(e.args[0], int):
exitcode = e.args[0]
if e.code is None:
exitcode = 0
elif isinstance(e.code, int):
exitcode = e.code
else:
sys.stderr.write(str(e.args[0]) + '\n')
sys.stderr.write(str(e.code) + '\n')
exitcode = 1
except:
exitcode = 1

View File

@ -864,12 +864,21 @@ class _TestSubclassingProcess(BaseTestCase):
os.unlink(testfn)
for reason in (True, False, 8):
p = self.Process(target=sys.exit, args=(reason,))
cases = [
((True,), 1),
((False,), 0),
((8,), 8),
((None,), 0),
((), 0),
]
for args, expected in cases:
with self.subTest(args=args):
p = self.Process(target=sys.exit, args=args)
p.daemon = True
p.start()
join_process(p)
self.assertEqual(p.exitcode, reason)
self.assertEqual(p.exitcode, expected)
#
#

View File

@ -746,6 +746,7 @@ Lawrence Hudson
Michael Hudson
Jim Hugunin
Greg Humphreys
Chris Hunt
Eric Huss
Nehal Hussain
Taihyun Hwang

View File

@ -0,0 +1 @@
Fix sys.exit() and sys.exit(None) exit code propagation when used in multiprocessing.Process.