Open
Description
Crash report
When running:
PYTHON_UOPS_OPTIMIZE=0 PYTHON_LLTRACE=1 ./python -m test test_multiprocessing_fork.test_processes -m test_free_from_gc
On a debug build, we get an assertion failure:
Using random seed: 2033438694
0:00:00 load avg: 1.57 Run 1 test sequentially in a single process
0:00:00 load avg: 1.57 [1/1] test_multiprocessing_fork.test_processes
Created a proto-trace for _path_join (<frozen importlib._bootstrap_external>:131) at byte offset 110 -- length 29
Created a proto-trace for _path_join (<frozen importlib._bootstrap_external>:131) at byte offset 116 -- length 13
Created a proto-trace for Heap._free_pending_blocks (/home/brandtbucher/cpython/Lib/multiprocessing/heap.py:258) at byte offset 126 -- length 482
Created a proto-trace for _TestHeap.test_free_from_gc (/home/brandtbucher/cpython/Lib/test/_test_multiprocessing.py:4114) at byte offset 486 -- length 27
Created a proto-trace for BufferWrapper.__init__ (/home/brandtbucher/cpython/Lib/multiprocessing/heap.py:326) at byte offset 0 -- length 516
python: Python/optimizer.c:1277: uop_optimize: Assertion `length <= UOP_MAX_TRACE_LENGTH' failed.
Fatal Python error: Aborted
Current thread 0x00007f6a0dc56740 (most recent call first):
File "/home/brandtbucher/cpython/Lib/multiprocessing/heap.py", line 326 in __init__
File "__init__", line ??? in __init__
File "/home/brandtbucher/cpython/Lib/test/_test_multiprocessing.py", line 4130 in test_free_from_gc
File "/home/brandtbucher/cpython/Lib/unittest/case.py", line 606 in _callTestMethod
File "/home/brandtbucher/cpython/Lib/unittest/case.py", line 660 in run
Fatal Python error: Segmentation fault
Segmentation fault (core dumped)
On a non-debug build, we get a buffer overflow:
Using random seed: 1659198442
0:00:00 load avg: 13.83 Run 1 test sequentially in a single process
0:00:00 load avg: 13.83 [1/1] test_multiprocessing_fork.test_processes
*** stack smashing detected ***: terminated
Fatal Python error: Aborted
Current thread 0x00007f11f9a27740 (most recent call first):
File "/home/brandtbucher/cpython/Lib/multiprocessing/heap.py", line 326 in __init__
File "__init__", line ??? in __init__
File "/home/brandtbucher/cpython/Lib/test/_test_multiprocessing.py", line 4130 in test_free_from_gc
File "/home/brandtbucher/cpython/Lib/unittest/case.py", line 606 in _callTestMethod
File "/home/brandtbucher/cpython/Lib/unittest/case.py", line 660 in run
File Fatal Python error: Segmentation fault
Segmentation fault (core dumped)
It looks like the optimizer just happens to do enough useful work that adding error and exit stubs doesn't put us over UOP_MAX_TRACE_LENGTH
anymore. My hunch is that the real bug is in translate_bytecode_to_trace
, where we're not reserving enough space for some instruction(s).
CC @Fidget-Spinner and @markshannon.