Closed
Description
Crash report
What happened?
It's possible to segfault or abort a no-gil interpreter running with PYTHON_GIL=0
by calling atexit
functions from threads:
from threading import Thread
import atexit
def g():
pass
def f():
for x in range(100):
atexit.register(g)
atexit._clear()
atexit.register(g)
for x in range(100):
Thread(target=f, args=()).start()
Found using fusil by @vstinner.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.0a1+ experimental free-threading build (heads/main-dirty:612ac283b81, Nov 16 2024, 01:37:56) [GCC 11.4.0]