Skip to content
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

test_interpreters: when TestInterpreterAttrs.test_id_type() is run alone, it fails with an assertion error #88128

Closed
vstinner opened this issue Apr 27, 2021 · 5 comments
Labels
3.10 only security fixes tests Tests in the Lib/test dir

Comments

@vstinner
Copy link
Member

BPO 43962
Nosy @vstinner, @ericsnowcurrently, @miss-islington, @nanjekyejoannah
PRs
  • bpo-43962: Fix _PyInterpreterState_IDIncref() #25683
  • [3.9] bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) #25685
  • [3.8] bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) #25686
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2021-04-27.22:55:01.625>
    labels = ['tests', '3.10']
    title = 'test_interpreters: when TestInterpreterAttrs.test_id_type() is run alone, it fails with an assertion error'
    updated_at = <Date 2021-04-28.13:47:01.117>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2021-04-28.13:47:01.117>
    actor = 'vstinner'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Tests']
    creation = <Date 2021-04-27.22:55:01.625>
    creator = 'vstinner'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 43962
    keywords = ['patch']
    message_count = 4.0
    messages = ['392145', '392183', '392187', '392197']
    nosy_count = 4.0
    nosy_names = ['vstinner', 'eric.snow', 'miss-islington', 'nanjekyejoannah']
    pr_nums = ['25683', '25685', '25686']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue43962'
    versions = ['Python 3.10']

    @vstinner
    Copy link
    Member Author

    Example on Linux.

    $ ./python -m test test_interpreters -m test.test_interpreters.TestInterpreterAttrs.test_id_type
    0:00:00 load avg: 1.20 Run tests sequentially
    0:00:00 load avg: 1.20 [1/1] test_interpreters
    python: Python/pystate.c:561: _PyInterpreterState_IDDecref: Assertion `interp->id_refcount != 0' failed.
    Fatal Python error: Aborted

    Current thread 0x00007f05eab42740 (most recent call first):
    File "/home/vstinner/python/master/Lib/unittest/case.py", line 549 in _callTestMethod
    File "/home/vstinner/python/master/Lib/unittest/case.py", line 592 in run
    File "/home/vstinner/python/master/Lib/unittest/case.py", line 652 in __call__
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 122 in run
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 84 in __call__
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 122 in run
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 84 in __call__
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 122 in run
    File "/home/vstinner/python/master/Lib/unittest/suite.py", line 84 in __call__
    File "/home/vstinner/python/master/Lib/test/support/testresult.py", line 169 in run
    File "/home/vstinner/python/master/Lib/test/support/init.py", line 959 in _run_suite
    File "/home/vstinner/python/master/Lib/test/support/init.py", line 1082 in run_unittest
    File "/home/vstinner/python/master/Lib/test/libregrtest/runtest.py", line 210 in _test_module
    File "/home/vstinner/python/master/Lib/test/libregrtest/runtest.py", line 246 in _runtest_inner2
    File "/home/vstinner/python/master/Lib/test/libregrtest/runtest.py", line 282 in _runtest_inner
    File "/home/vstinner/python/master/Lib/test/libregrtest/runtest.py", line 154 in _runtest
    File "/home/vstinner/python/master/Lib/test/libregrtest/runtest.py", line 194 in runtest
    File "/home/vstinner/python/master/Lib/test/libregrtest/main.py", line 423 in run_tests_sequential
    File "/home/vstinner/python/master/Lib/test/libregrtest/main.py", line 521 in run_tests
    File "/home/vstinner/python/master/Lib/test/libregrtest/main.py", line 694 in _main
    File "/home/vstinner/python/master/Lib/test/libregrtest/main.py", line 641 in main
    File "/home/vstinner/python/master/Lib/test/libregrtest/main.py", line 719 in main
    File "/home/vstinner/python/master/Lib/test/main.py", line 2 in <module>
    File "/home/vstinner/python/master/Lib/runpy.py", line 86 in _run_code
    File "/home/vstinner/python/master/Lib/runpy.py", line 196 in _run_module_as_main

    Extension modules: _testcapi, _xxsubinterpreters (total: 2)
    Abandon (core dumped)

    When the whole test case is run, it's fine:

    $ ./python -m test test_interpreters -m TestInterpreterAttrs -v
    == CPython 3.10.0a7+ (heads/master:6bd9288b80, Apr 27 2021, 22:16:25) [GCC 11.0.1 20210324 (Red Hat 11.0.1-0)]
    == Linux-5.11.15-300.fc34.x86_64-x86_64-with-glibc2.33 little-endian
    == cwd: /home/vstinner/python/master/build/test_python_16394æ
    == CPU count: 8
    == encodings: locale=UTF-8, FS=utf-8
    0:00:00 load avg: 1.39 Run tests sequentially
    0:00:00 load avg: 1.39 [1/1] test_interpreters
    test_custom_id (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_custom_isolated_default (test.test_interpreters.TestInterpreterAttrs) ... skipped 'not ready yet (see bpo-32604)'
    test_custom_isolated_explicit (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_equality (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_id_readonly (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_id_type (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_isolated_readonly (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_main_id (test.test_interpreters.TestInterpreterAttrs) ... ok
    test_main_isolated (test.test_interpreters.TestInterpreterAttrs) ... skipped 'not ready yet (see bpo-32604)'
    test_subinterpreter_isolated_default (test.test_interpreters.TestInterpreterAttrs) ... skipped 'not ready yet (see bpo-32604)'
    test_subinterpreter_isolated_explicit (test.test_interpreters.TestInterpreterAttrs) ... ok

    Ran 11 tests in 0.159s

    OK (skipped=3)

    == Tests result: SUCCESS ==

    1 test OK.

    Total duration: 285 ms
    Tests result: SUCCESS

    @vstinner vstinner added 3.10 only security fixes tests Tests in the Lib/test dir labels Apr 27, 2021
    @vstinner vstinner changed the title test_interpreters: when test_id_type() is run alone, it fails with an assertion error test_interpreters: when TestInterpreterAttrs.test_id_type() is run alone, it fails with an assertion error Apr 27, 2021
    @vstinner vstinner changed the title test_interpreters: when test_id_type() is run alone, it fails with an assertion error test_interpreters: when TestInterpreterAttrs.test_id_type() is run alone, it fails with an assertion error Apr 27, 2021
    @vstinner
    Copy link
    Member Author

    Creating an _interpreters.InterpreterID object calls newinterpid() which calls _PyInterpreterState_IDIncref(interp).

    _PyInterpreterState_IDIncref(interp) does nothing if interp->id_mutex is NULL.

    Calling _interpreters.get_current() calls interp_get_current() which calls _PyInterpreterState_IDInitref().

    _PyInterpreterState_IDInitref() creates the id_mutex and initializes id_refcount to 0.

    Later, when the _interpreters.InterpreterID object is deallocated, interpid_dealloc() calls _PyInterpreterState_IDDecref(). Since id_mutex was created in the meanwhile, _PyInterpreterState_IDDecref() now decrements id_refcnt.

    ... It doesn't work: _PyInterpreterState_IDIncref() should always increase the reference count.

    @vstinner
    Copy link
    Member Author

    New changeset 32c5a17 by Victor Stinner in branch 'master':
    bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683)
    32c5a17

    @vstinner
    Copy link
    Member Author

    New changeset 77db337 by Victor Stinner in branch '3.8':
    bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) (GH-25686)
    77db337

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    @kumaraditya303
    Copy link
    Contributor

    Closing as it seems fixed.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.10 only security fixes tests Tests in the Lib/test dir
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants