Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Closed
Description
Crash report
CPython versions tested on:
3.12, CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.12.0rc1+ (heads/3.12:149d70c254, Aug 22 2023, 16:11:47) [GCC 13.2.0]
What happened?
Thepydantic test suite started causing pytest to segfault on exit recently, with Python 3.12. I've been able to bisect it to pydantic commitpydantic/pydantic@f5e3aa9 that looks relatively harmless. I've also been able to bisect CPython into commit58f9c88:
gh-106403: Restore weakref support for TypeVar and friends (GH-106418)
I have been able to reproduce the problem with tip ofmain as well, though I have to note it's a bit of heisenbug. I've basically had a very lucky day today that I've managed to correctly bisect on the second attempt.
To reproduce:
git clone https://github.com/pydantic/pydantic/cd pydanticpython -m venv .venv. .venv/bin/activatepip install -e . pytest dirty-equals# may need to be repeated a few timespython -m pytest -o addopts= tests/test_generics.py --deselect tests/test_generics.py::test_partial_specification_name -sError messages
Backtrace
Core was generated by `python -m pytest -o addopts= tests/test_generics.py --deselect tests/test_gener'.Program terminated with signal SIGSEGV, Segmentation fault.#0 clear_weakref (self=self@entry=0x7f0a9a171df0) at Objects/weakrefobject.c:6262 if (*list == self)(gdb) bt#0 clear_weakref (self=self@entry=0x7f0a9a171df0) at Objects/weakrefobject.c:62#1 0x0000557c3663d843 in _PyWeakref_ClearRef (self=self@entry=0x7f0a9a171df0) at Objects/weakrefobject.c:102#2 0x0000557c366ec77e in handle_weakrefs (unreachable=unreachable@entry=0x7ffeec923ad0, old=old@entry=0x557c36a40f68 <_PyRuntime+76552>) at Modules/gcmodule.c:804#3 0x0000557c366ecad3 in gc_collect_main (tstate=0x557c36a9e7b0 <_PyRuntime+459600>, generation=generation@entry=2, n_collected=n_collected@entry=0x0, n_uncollectable=n_uncollectable@entry=0x0, nofail=nofail@entry=1) at Modules/gcmodule.c:1284#4 0x0000557c366ed333 in _PyGC_CollectNoFail (tstate=tstate@entry=0x557c36a9e7b0 <_PyRuntime+459600>) at Modules/gcmodule.c:2135#5 0x0000557c366c39bb in finalize_modules (tstate=tstate@entry=0x557c36a9e7b0 <_PyRuntime+459600>) at Python/pylifecycle.c:1602#6 0x0000557c366c524e in Py_FinalizeEx () at Python/pylifecycle.c:1863#7 0x0000557c366eb4f9 in Py_RunMain () at Modules/main.c:691#8 0x0000557c366eb56e in pymain_main (args=args@entry=0x7ffeec923c10) at Modules/main.c:719#9 0x0000557c366eb63d in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:743#10 0x0000557c3655979e in main (argc=<optimized out>, argv=<optimized out>) at ./Programs/python.c:15(gdb) p self$1 = (PyWeakReference *) 0x7f0a9a171df0(gdb) p *self$2 = {ob_base = {{ob_refcnt = 1, ob_refcnt_split = {1, 0}}, ob_type = 0x557c38bda680}, wr_object = 0x7f0a9a171c70, wr_callback = 0x0, hash = -1, wr_prev = 0x0, wr_next = 0x0, vectorcall = 0x557c3663aa08 <weakref_vectorcall>}(gdb) p *listCannot access memory at address 0xfe15355ba7e0(gdb) p list$3 = (PyWeakReference **) 0xfe15355ba7e0Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status
Done