Issue #13812: When a multiprocessing Process child raises an exception, flush stderr after printing the exception traceback.
This commit is contained in:
parent
9f6b02ecde
commit
84a0fbf6b0
|
@ -124,8 +124,6 @@ if sys.platform != 'win32':
|
|||
import random
|
||||
random.seed()
|
||||
code = process_obj._bootstrap()
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
os._exit(code)
|
||||
|
||||
def poll(self, flag=os.WNOHANG):
|
||||
|
|
|
@ -275,16 +275,17 @@ class Process(object):
|
|||
exitcode = e.args[0]
|
||||
else:
|
||||
sys.stderr.write(e.args[0] + '\n')
|
||||
sys.stderr.flush()
|
||||
exitcode = 1
|
||||
except:
|
||||
exitcode = 1
|
||||
import traceback
|
||||
sys.stderr.write('Process %s:\n' % self.name)
|
||||
sys.stderr.flush()
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
util.info('process exiting with exitcode %d' % exitcode)
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
|
||||
util.info('process exiting with exitcode %d' % exitcode)
|
||||
return exitcode
|
||||
|
||||
#
|
||||
|
|
|
@ -367,6 +367,29 @@ class _TestSubclassingProcess(BaseTestCase):
|
|||
uppercaser.stop()
|
||||
uppercaser.join()
|
||||
|
||||
def test_stderr_flush(self):
|
||||
# sys.stderr is flushed at process shutdown (issue #13812)
|
||||
if self.TYPE == "threads":
|
||||
return
|
||||
|
||||
testfn = test.support.TESTFN
|
||||
self.addCleanup(test.support.unlink, testfn)
|
||||
proc = self.Process(target=self._test_stderr_flush, args=(testfn,))
|
||||
proc.start()
|
||||
proc.join()
|
||||
with open(testfn, 'r') as f:
|
||||
err = f.read()
|
||||
# The whole traceback was printed
|
||||
self.assertIn("ZeroDivisionError", err)
|
||||
self.assertIn("test_multiprocessing.py", err)
|
||||
self.assertIn("1/0 # MARKER", err)
|
||||
|
||||
@classmethod
|
||||
def _test_stderr_flush(cls, testfn):
|
||||
sys.stderr = open(testfn, 'w')
|
||||
1/0 # MARKER
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
|
|
|
@ -111,6 +111,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #13812: When a multiprocessing Process child raises an exception,
|
||||
flush stderr after printing the exception traceback.
|
||||
|
||||
- Issue #13885: CVE-2011-3389: the _ssl module would always disable the CBC
|
||||
IV attack countermeasure.
|
||||
|
||||
|
|
Loading…
Reference in New Issue