Skip to content

Race condition in subinterpreters during subinterpreter creation on Windows debug build #100711

Closed
@Fidget-Spinner

Description

@Fidget-Spinner

Windows reproducer on main branch: run .\PCbuild\amd64\python_d.exe -m test test__xxsubinterpreters -F and leave it running. If by run 100 nothing crashes, cancel and re-run again until you get a segfault.

Traceback:

Thread 0x000022ec (most recent call first):
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\test__xxsubinterpreters.py", line 788 in setUp
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\case.py", line 576 in _callSetUp
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\case.py", line 619 in run
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\case.py", line 678 in __call__
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 122 in run
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 84 in __call__
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 122 in run
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 84 in __call__
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 122 in run
  File "D:\Ken\Documents\GitHub\cpython\Lib\unittest\suite.py", line 84 in __call__
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\support\testresult.py", line 140 in run
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\support\__init__.py", line 1099 in _run_suite
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\support\__init__.py", line 1225 in run_unittest
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\runtest.py", line 281 in _test_module
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\runtest.py", line 317 in _runtest_inner2
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\runtest.py", line 360 in _runtest_inner
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\runtest.py", line 235 in _runtest
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\runtest.py", line 265 in runtest
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\main.py", line 456 in run_tests_sequential
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\main.py", line 574 in run_tests
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\main.py", line 752 in _main
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\main.py", line 711 in main
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\libregrtest\main.py", line 775 in main
  File "D:\Ken\Documents\GitHub\cpython\Lib\test\__main__.py", line 2 in <module>
  File "D:\Ken\Documents\GitHub\cpython\Lib\runpy.py", line 88 in _run_code
  File "D:\Ken\Documents\GitHub\cpython\Lib\runpy.py", line 198 in _run_module_as_main

Somehow after calling __xxsubinterpreters.create: in drop_gil the &ceval2->gil_drop_request is non-NULL but invalid, so when we try to _Py_atomic_load load from that address it segfaults.

I have my suspicions it's due to swapping of GIL states but this is incredibly hard to debug because the race condition sometimes triggers when I run the test 4 times in a row, and sometimes doesn't trigger after 2 hours of continuous running.

Metadata

Metadata

Assignees

No one assigned

    Labels

    pendingThe issue will be closed if no feedback is providedtopic-subinterpreterstype-bugAn unexpected behavior, bug, or error

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy