| import textwrap |
| import unittest |
| |
| from test.support import import_helper, script_helper |
| |
| |
| # Make sure _testinternalcapi is available before running the test. |
| import_helper.import_module('_testinternalcapi') |
| |
| |
| class InterpreterTeardownTests(unittest.TestCase): |
| def test_destroy_subinterpreter_does_not_abort(self): |
| # gh-153176: destroy_interpreter(basic=True) used to call |
| # PyThreadState_Clear() on a non-current thread state, which on a |
| # free-threaded debug build reclaimed mimalloc pages into a heap not |
| # owned by the current thread and aborted the process. Run the |
| # reproduction in a subprocess so that a regression surfaces as a |
| # non-zero exit / SIGABRT instead of killing the test runner. |
| script = textwrap.dedent(""" |
| import _testinternalcapi |
| |
| interpid = _testinternalcapi.create_interpreter() |
| _testinternalcapi.destroy_interpreter(interpid, basic=True) |
| """) |
| script_helper.assert_python_ok('-c', script) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |