Skip to content

AMD64 Windows11 Bigmem 3.x: test_bigmem failed with !_Py_IsImmortal(FROM_GC(gc)) assertion error #115124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
vstinner opened this issue Feb 7, 2024 · 5 comments

Comments

@vstinner
Copy link
Member

vstinner commented Feb 7, 2024

build: https://buildbot.python.org/all/#/builders/1079/builds/3327

Error after tests complete, when running gc_collect() C function:

Assertion failed: !_Py_IsImmortal(FROM_GC(gc)), file R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Python\gc.c, line 476

Logs:

R:\buildarea\3.x.ambv-bb-win11.bigmem\build>"R:\buildarea\3.x.ambv-bb-win11.bigmem\build\PCbuild\amd64\python_d.exe"  -m test --fast-ci --slow-ci -M24g -uall --junit-xml test-results.xml -j4 --timeout 4800 
+ 'R:\buildarea\3.x.ambv-bb-win11.bigmem\build\PCbuild\amd64\python_d.exe' -u -W default -bb -E -m test --fast-ci --slow-ci -M24g -uall --junit-xml test-results.xml -j4 --timeout 4800 --dont-add-python-opts
== CPython 3.13.0a3+ (heads/main:bcccf1fb63, Feb 5 2024, 19:52:36) [MSC v.1936 64 bit (AMD64)]
== Windows-11-10.0.22631-SP0 little-endian
== Python build: debug
== cwd: R:\buildarea\3.x.ambv-bb-win11.bigmem\build\build\test_python_worker_3608�
== CPU count: 6
== encodings: locale=cp1252 FS=utf-8
== resources: all

(...)

1:43:02 load avg: 0.04 [2/2/2] test_bigmem worker non-zero exit code (Exit code 3)
Re-running test_bigmem in verbose mode
test_capitalize (test.test_bigmem.BytearrayTest.test_capitalize) ... ok
test_center (test.test_bigmem.BytearrayTest.test_center) ... ok
test_compare (test.test_bigmem.BytearrayTest.test_compare) ... ok
test_concat (test.test_bigmem.BytearrayTest.test_concat) ... ok
test_contains (test.test_bigmem.BytearrayTest.test_contains) ... ok
test_count (test.test_bigmem.BytearrayTest.test_count) ... ok
test_decode (test.test_bigmem.BytearrayTest.test_decode) ... ok
test_endswith (test.test_bigmem.BytearrayTest.test_endswith) ... ok
test_expandtabs (test.test_bigmem.BytearrayTest.test_expandtabs) ... ok
test_find (test.test_bigmem.BytearrayTest.test_find) ... ok
test_index (test.test_bigmem.BytearrayTest.test_index) ... ok
test_isalnum (test.test_bigmem.BytearrayTest.test_isalnum) ... ok
test_isalpha (test.test_bigmem.BytearrayTest.test_isalpha) ... ok
test_isdigit (test.test_bigmem.BytearrayTest.test_isdigit) ... ok
test_islower (test.test_bigmem.BytearrayTest.test_islower) ... ok
test_isspace (test.test_bigmem.BytearrayTest.test_isspace) ... ok
test_istitle (test.test_bigmem.BytearrayTest.test_istitle) ... ok
test_isupper (test.test_bigmem.BytearrayTest.test_isupper) ... ok
test_join (test.test_bigmem.BytearrayTest.test_join) ... ok
test_ljust (test.test_bigmem.BytearrayTest.test_ljust) ... ok
test_lower (test.test_bigmem.BytearrayTest.test_lower) ... ok
test_lstrip (test.test_bigmem.BytearrayTest.test_lstrip) ... ok
test_repeat (test.test_bigmem.BytearrayTest.test_repeat) ... ok
test_replace (test.test_bigmem.BytearrayTest.test_replace) ... ok
test_rfind (test.test_bigmem.BytearrayTest.test_rfind) ... ok
test_rindex (test.test_bigmem.BytearrayTest.test_rindex) ... ok
test_rjust (test.test_bigmem.BytearrayTest.test_rjust) ... ok
test_rstrip (test.test_bigmem.BytearrayTest.test_rstrip) ... ok
test_slice_and_getitem (test.test_bigmem.BytearrayTest.test_slice_and_getitem) ... ok
test_split_small (test.test_bigmem.BytearrayTest.test_split_small) ... ok
test_splitlines (test.test_bigmem.BytearrayTest.test_splitlines) ... ok
test_startswith (test.test_bigmem.BytearrayTest.test_startswith) ... ok
test_strip (test.test_bigmem.BytearrayTest.test_strip) ... ok
test_swapcase (test.test_bigmem.BytearrayTest.test_swapcase) ... ok
test_title (test.test_bigmem.BytearrayTest.test_title) ... ok
test_translate (test.test_bigmem.BytearrayTest.test_translate) ... ok
test_upper (test.test_bigmem.BytearrayTest.test_upper) ... ok
test_zfill (test.test_bigmem.BytearrayTest.test_zfill) ... ok
test_capitalize (test.test_bigmem.BytesTest.test_capitalize) ... ok
test_center (test.test_bigmem.BytesTest.test_center) ... ok
test_compare (test.test_bigmem.BytesTest.test_compare) ... ok
test_concat (test.test_bigmem.BytesTest.test_concat) ... ok
test_contains (test.test_bigmem.BytesTest.test_contains) ... ok
test_count (test.test_bigmem.BytesTest.test_count) ... ok
test_decode (test.test_bigmem.BytesTest.test_decode) ... ok
test_endswith (test.test_bigmem.BytesTest.test_endswith) ... ok
test_expandtabs (test.test_bigmem.BytesTest.test_expandtabs) ... ok
test_find (test.test_bigmem.BytesTest.test_find) ... ok
test_hash (test.test_bigmem.BytesTest.test_hash) ... ok
test_index (test.test_bigmem.BytesTest.test_index) ... ok
test_isalnum (test.test_bigmem.BytesTest.test_isalnum) ... ok
test_isalpha (test.test_bigmem.BytesTest.test_isalpha) ... ok
test_isdigit (test.test_bigmem.BytesTest.test_isdigit) ... ok
test_islower (test.test_bigmem.BytesTest.test_islower) ... ok
test_isspace (test.test_bigmem.BytesTest.test_isspace) ... ok
test_istitle (test.test_bigmem.BytesTest.test_istitle) ... ok
test_isupper (test.test_bigmem.BytesTest.test_isupper) ... ok
test_join (test.test_bigmem.BytesTest.test_join) ... ok
test_ljust (test.test_bigmem.BytesTest.test_ljust) ... ok
test_lower (test.test_bigmem.BytesTest.test_lower) ... ok
test_lstrip (test.test_bigmem.BytesTest.test_lstrip) ... ok
test_repeat (test.test_bigmem.BytesTest.test_repeat) ... ok
test_replace (test.test_bigmem.BytesTest.test_replace) ... ok
test_rfind (test.test_bigmem.BytesTest.test_rfind) ... ok
test_rindex (test.test_bigmem.BytesTest.test_rindex) ... ok
test_rjust (test.test_bigmem.BytesTest.test_rjust) ... ok
test_rstrip (test.test_bigmem.BytesTest.test_rstrip) ... ok
test_slice_and_getitem (test.test_bigmem.BytesTest.test_slice_and_getitem) ... ok
test_split_large (test.test_bigmem.BytesTest.test_split_large) ... ok
test_split_small (test.test_bigmem.BytesTest.test_split_small) ... ok
test_splitlines (test.test_bigmem.BytesTest.test_splitlines) ... ok
test_startswith (test.test_bigmem.BytesTest.test_startswith) ... ok
test_strip (test.test_bigmem.BytesTest.test_strip) ... ok
test_swapcase (test.test_bigmem.BytesTest.test_swapcase) ... ok
test_title (test.test_bigmem.BytesTest.test_title) ... ok
test_translate (test.test_bigmem.BytesTest.test_translate) ... ok
test_upper (test.test_bigmem.BytesTest.test_upper) ... ok
test_zfill (test.test_bigmem.BytesTest.test_zfill) ... ok
test_dict (test.test_bigmem.DictTest.test_dict) ... skipped 'not enough memory: 53.3G minimum needed'
test_append (test.test_bigmem.ListTest.test_append) ... ok
test_compare (test.test_bigmem.ListTest.test_compare) ... skipped 'not enough memory: 32.0G minimum needed'
test_concat_large (test.test_bigmem.ListTest.test_concat_large) ... skipped 'not enough memory: 48.0G minimum needed'
test_concat_small (test.test_bigmem.ListTest.test_concat_small) ... skipped 'not enough memory: 24.0G minimum needed'
test_contains (test.test_bigmem.ListTest.test_contains) ... ok
test_count (test.test_bigmem.ListTest.test_count) ... ok
test_extend_large (test.test_bigmem.ListTest.test_extend_large) ... skipped 'not enough memory: 36.0G minimum needed'
test_extend_small (test.test_bigmem.ListTest.test_extend_small) ... ok
test_hash (test.test_bigmem.ListTest.test_hash) ... ok
test_index (test.test_bigmem.ListTest.test_index) ... ok
test_index_and_slice (test.test_bigmem.ListTest.test_index_and_slice) ... ok
test_inplace_concat_large (test.test_bigmem.ListTest.test_inplace_concat_large) ... skipped 'not enough memory: 36.0G minimum needed'
test_inplace_concat_small (test.test_bigmem.ListTest.test_inplace_concat_small) ... ok
test_inplace_repeat_large (test.test_bigmem.ListTest.test_inplace_repeat_large) ... skipped 'not enough memory: 36.0G minimum needed'
test_inplace_repeat_small (test.test_bigmem.ListTest.test_inplace_repeat_small) ... ok
test_insert (test.test_bigmem.ListTest.test_insert) ... ok
test_pop (test.test_bigmem.ListTest.test_pop) ... ok
test_remove (test.test_bigmem.ListTest.test_remove) ... ok
test_repeat_large (test.test_bigmem.ListTest.test_repeat_large) ... skipped 'not enough memory: 48.0G minimum needed'
test_repeat_small (test.test_bigmem.ListTest.test_repeat_small) ... skipped 'not enough memory: 24.0G minimum needed'
test_repr_large (test.test_bigmem.ListTest.test_repr_large) ... skipped 'not enough memory: 30.0G minimum needed'
test_repr_small (test.test_bigmem.ListTest.test_repr_small) ... ok
test_reverse (test.test_bigmem.ListTest.test_reverse) ... ok
test_sort (test.test_bigmem.ListTest.test_sort) ... skipped 'not enough memory: 24.0G minimum needed'
test_capitalize (test.test_bigmem.StrTest.test_capitalize) ... skipped 'not enough memory: 28.0G minimum needed'
test_center (test.test_bigmem.StrTest.test_center) ... ok
test_compare (test.test_bigmem.StrTest.test_compare) ... ok
test_concat (test.test_bigmem.StrTest.test_concat) ... ok
test_contains (test.test_bigmem.StrTest.test_contains) ... ok
test_count (test.test_bigmem.StrTest.test_count) ... ok
test_encode (test.test_bigmem.StrTest.test_encode) ... ok
test_encode_ascii (test.test_bigmem.StrTest.test_encode_ascii) ... ok
test_encode_raw_unicode_escape (test.test_bigmem.StrTest.test_encode_raw_unicode_escape) ... ok
test_encode_utf32 (test.test_bigmem.StrTest.test_encode_utf32) ... ok
test_encode_utf7 (test.test_bigmem.StrTest.test_encode_utf7) ... ok
test_endswith (test.test_bigmem.StrTest.test_endswith) ... ok
test_expandtabs (test.test_bigmem.StrTest.test_expandtabs) ... ok
test_find (test.test_bigmem.StrTest.test_find) ... ok
test_format (test.test_bigmem.StrTest.test_format) ... ok
test_hash (test.test_bigmem.StrTest.test_hash) ... ok
test_index (test.test_bigmem.StrTest.test_index) ... ok
test_isalnum (test.test_bigmem.StrTest.test_isalnum) ... ok
test_isalpha (test.test_bigmem.StrTest.test_isalpha) ... ok
test_isdigit (test.test_bigmem.StrTest.test_isdigit) ... ok
test_islower (test.test_bigmem.StrTest.test_islower) ... ok
test_isspace (test.test_bigmem.StrTest.test_isspace) ... ok
test_istitle (test.test_bigmem.StrTest.test_istitle) ... ok
test_isupper (test.test_bigmem.StrTest.test_isupper) ... ok
test_join (test.test_bigmem.StrTest.test_join) ... ok
test_ljust (test.test_bigmem.StrTest.test_ljust) ... ok
test_lower (test.test_bigmem.StrTest.test_lower) ... ok
test_lstrip (test.test_bigmem.StrTest.test_lstrip) ... ok
test_repeat (test.test_bigmem.StrTest.test_repeat) ... ok
test_replace (test.test_bigmem.StrTest.test_replace) ... ok
test_repr_large (test.test_bigmem.StrTest.test_repr_large) ... ok
test_repr_small (test.test_bigmem.StrTest.test_repr_small) ... ok
test_rfind (test.test_bigmem.StrTest.test_rfind) ... ok
test_rindex (test.test_bigmem.StrTest.test_rindex) ... ok
test_rjust (test.test_bigmem.StrTest.test_rjust) ... ok
test_rstrip (test.test_bigmem.StrTest.test_rstrip) ... ok
test_slice_and_getitem (test.test_bigmem.StrTest.test_slice_and_getitem) ... ok
test_split_large (test.test_bigmem.StrTest.test_split_large) ... ok
test_split_small (test.test_bigmem.StrTest.test_split_small) ... ok
test_splitlines (test.test_bigmem.StrTest.test_splitlines) ... ok
test_startswith (test.test_bigmem.StrTest.test_startswith) ... ok
test_strip (test.test_bigmem.StrTest.test_strip) ... ok
test_swapcase (test.test_bigmem.StrTest.test_swapcase) ... skipped 'not enough memory: 28.0G minimum needed'
test_title (test.test_bigmem.StrTest.test_title) ... skipped 'not enough memory: 28.0G minimum needed'
test_translate (test.test_bigmem.StrTest.test_translate) ... ok
test_unicode_repr (test.test_bigmem.StrTest.test_unicode_repr) ... ok
test_unicode_repr_wide (test.test_bigmem.StrTest.test_unicode_repr_wide) ... ok
test_upper (test.test_bigmem.StrTest.test_upper) ... ok
test_zfill (test.test_bigmem.StrTest.test_zfill) ... ok
test_compare (test.test_bigmem.TupleTest.test_compare) ... skipped 'not enough memory: 32.0G minimum needed'
test_concat_large (test.test_bigmem.TupleTest.test_concat_large) ... skipped 'not enough memory: 48.0G minimum needed'
test_concat_small (test.test_bigmem.TupleTest.test_concat_small) ... skipped 'not enough memory: 24.0G minimum needed'
test_contains (test.test_bigmem.TupleTest.test_contains) ... ok
test_from_2G_generator (test.test_bigmem.TupleTest.test_from_2G_generator) ... ok
test_from_almost_2G_generator (test.test_bigmem.TupleTest.test_from_almost_2G_generator) ... ok
test_hash (test.test_bigmem.TupleTest.test_hash) ... ok
test_index_and_slice (test.test_bigmem.TupleTest.test_index_and_slice) ... ok
test_repeat_large (test.test_bigmem.TupleTest.test_repeat_large) ... skipped 'not enough memory: 48.0G minimum needed'
test_repeat_large_2 (test.test_bigmem.TupleTest.test_repeat_large_2) ... ok
test_repeat_small (test.test_bigmem.TupleTest.test_repeat_small) ... skipped 'not enough memory: 24.0G minimum needed'
test_repr_large (test.test_bigmem.TupleTest.test_repr_large) ... skipped 'not enough memory: 30.0G minimum needed'
test_repr_small (test.test_bigmem.TupleTest.test_repr_small) ... ok

----------------------------------------------------------------------
Ran 165 tests in 2954.633s

OK (skipped=20)

Assertion failed: !_Py_IsImmortal(FROM_GC(gc)), file R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Python\gc.c, line 476
Fatal Python error: Aborted

Current thread 0x00000c1c (most recent call first):
  Garbage-collecting
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\support\__init__.py", line 776 in gc_collect
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\single.py", line 141 in _load_run_test
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\single.py", line 178 in _runtest_env_changed_exc
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\single.py", line 278 in _runtest
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\single.py", line 306 in run_single_test
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\worker.py", line 91 in worker_process
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\worker.py", line 126 in main
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\test\libregrtest\worker.py", line 130 in <module>
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\runpy.py", line 88 in _run_code
  File "R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Lib\runpy.py", line 198 in _run_module_as_main

Extension modules: _testcapi, _wmi (total: 2)

(...)

2 tests failed:
    test.test_multiprocessing_spawn.test_processes test_bigmem

426 tests OK.

EDIT: I created issue gh-115127 for the test_multiprocessing_spawn error.

Linked PRs

vstinner added a commit to vstinner/cpython that referenced this issue Feb 7, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
vstinner added a commit to vstinner/cpython that referenced this issue Feb 7, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
@vstinner
Copy link
Member Author

vstinner commented Feb 7, 2024

See also issue gh-115122: "regrtest: add --bisect option to run test.bisect_cmd on failed tests".

@vstinner
Copy link
Member Author

vstinner commented Feb 7, 2024

@ambv message on Discord:

Note: the bigmem buildbot caught an assertion failure in GC

Started with https://buildbot.python.org/all/#/builders/1079/builds/3327
Latest failure: https://buildbot.python.org/all/#/builders/1079/builds/3333

Assertion failed: !_Py_IsImmortal(FROM_GC(gc)), file R:\buildarea\3.x.ambv-bb-win11.bigmem\build\Python\gc.c, line 476

I'll be disabling bigmem on 3.12 as at this point it's unlikely to catch anything new in 3.12. So we'll have less waiting for the buildbot on main.

@vstinner
Copy link
Member Author

vstinner commented Feb 7, 2024

Started with https://buildbot.python.org/all/#/builders/1079/builds/3327

This build contains two changes:

@vstinner
Copy link
Member Author

vstinner commented Feb 7, 2024

See also issue gh-115127: multiprocessing test_thread_safety() fails with "gc_list_is_empty(to) || gc_old_space(to_tail) == gc_old_space(from_tail)" assert error.

@encukou
Copy link
Member

encukou commented Feb 7, 2024

This was #108362

@encukou encukou closed this as not planned Won't fix, can't repro, duplicate, stale Feb 7, 2024
vstinner added a commit to vstinner/cpython that referenced this issue Feb 12, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
vstinner added a commit to vstinner/cpython that referenced this issue Feb 12, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
vstinner added a commit to vstinner/cpython that referenced this issue Feb 12, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
vstinner added a commit to vstinner/cpython that referenced this issue Feb 15, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
vstinner added a commit that referenced this issue Feb 15, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
diegorusso pushed a commit to diegorusso/cpython that referenced this issue Apr 17, 2024
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
LukasWoodtli pushed a commit to LukasWoodtli/cpython that referenced this issue Jan 22, 2025
Replace assert() with _PyObject_ASSERT() in gc.c to dump the object
when an assertion fails.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants
@vstinner @encukou and others