SEGV in `_PyObject_ClearFreeLists` after exception in subinterpreter
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
What happened?
Executing the following two file python script with python3.14 -m src crashes the (sub?)interpreter with a SIGSEGV.
# src/executor.py
import importlib
import sys
import traceback
def execute_module():
importlib.invalidate_caches()
sys.modules = "xxx"
importlib.import_module("zip")
# src/__main__,py
from concurrent import interpreters
sub_interpreter = interpreters.create()
queue = interpreters.create_queue()
def run_module(queue):
import importlib
execute_module_fn = importlib.import_module("src.executor").execute_module
execute_module_fn()
queue.put(True)
sub_interpreter.call(run_module, queue)
queue.get()
sub_interpreter.close()
Starting program: /nix/store/6p5sldsqcgn0x0al9h2hvqpd4xqi1wpm-user-environment/bin/python3.14 -m src
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/nix/store/km4g87jxsqxvcq344ncyb8h1i6f3cqxh-glibc-2.40-218/lib/libthread_db.so.1".
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/uli/DEV/python-segv/src/__main__.py", line 14, in <module>
sub_interpreter.call(run_module, queue)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/python3.14/concurrent/interpreters/__init__.py", line 238, in call
return self._call(callable, args, kwargs)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/python3.14/concurrent/interpreters/__init__.py", line 222, in _call
raise ExecutionFailed(excinfo)
concurrent.interpreters.ExecutionFailed: AttributeError: 'str' object has no attribute 'get'
<sys>:0: RuntimeWarning: remaining subinterpreters; close them with Interpreter.close()
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7989bb9 in _PyObject_ClearFreeLists ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
(gdb) bt
#0 0x00007ffff7989bb9 in _PyObject_ClearFreeLists ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#1 0x00007ffff7adce4f in _PyGC_Collect ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#2 0x00007ffff7b1ace4 in finalize_modules.lto_priv ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#3 0x00007ffff7b24b57 in Py_EndInterpreter ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#4 0x00007ffff7c35451 in _Py_Finalize.part.0.constprop.0 ()
--Type <RET> for more, q to quit, c to continue without paging--
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#5 0x00007ffff7b5f8d8 in Py_RunMain ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#6 0x00007ffff7b60b81 in Py_BytesMain ()
from /nix/store/w9f9jj6mbrk4146wm69qlyssjghildlf-python3-3.14.3/lib/libpython3.14.so.1.0
#7 0x00007ffff742a4d8 in __libc_start_call_main ()
from /nix/store/km4g87jxsqxvcq344ncyb8h1i6f3cqxh-glibc-2.40-218/lib/libc.so.6
#8 0x00007ffff742a59b in __libc_start_main_impl ()
from /nix/store/km4g87jxsqxvcq344ncyb8h1i6f3cqxh-glibc-2.40-218/lib/libc.so.6
#9 0x0000555555555085 in _start ()
The following reduction shows the same crashing behavior, I wasn't able to reproduce it while running in gdb however.
from concurrent import interpreters
sub_interpreter = interpreters.create()
def run_module():
import importlib
import sys
import traceback
importlib.invalidate_caches()
sys.modules = "xxx"
importlib.import_module("zip")
sub_interpreter.call(run_module)
sub_interpreter.close()
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.3 (main, Feb 3 2026, 15:32:20) [GCC 14.3.0] on linux
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với script rút gọn sử dụng concurrent.interpreters, sys.modules = "xxx" và importlib.import_module("zip") trên Python 3.14 Linux, sau đó kiểm tra traceback qua _PyObject_ClearFreeLists, _PyGC_Collect, finalize_modules và Py_EndInterpreter. Công việc được xem là hoàn tất khi reproducer không còn gây ra SIGSEGV trong quá trình đóng subinterpreter, với coverage hồi quy cho đường đi của exception đã được báo cáo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 46/100