mirror of
https://github.com/python/cpython.git
synced 2025-11-02 14:41:33 +00:00
bpo-46417: Finalize structseq types at exit (GH-30645)
Add _PyStructSequence_FiniType() and _PyStaticType_Dealloc() functions to finalize a structseq static type in Py_Finalize(). Currrently, these functions do nothing if Python is built in release mode. Clear static types: * AsyncGenHooksType: sys.set_asyncgen_hooks() * FlagsType: sys.flags * FloatInfoType: sys.float_info * Hash_InfoType: sys.hash_info * Int_InfoType: sys.int_info * ThreadInfoType: sys.thread_info * UnraisableHookArgsType: sys.unraisablehook * VersionInfoType: sys.version * WindowsVersionType: sys.getwindowsversion()
This commit is contained in:
parent
27df7566bc
commit
e9e3eab0b8
17 changed files with 230 additions and 2 deletions
|
|
@ -329,6 +329,18 @@ def test_run_main_loop(self):
|
|||
self.assertEqual(out, "Py_RunMain(): sys.argv=['-c', 'arg2']\n" * nloop)
|
||||
self.assertEqual(err, '')
|
||||
|
||||
def test_finalize_structseq(self):
|
||||
# bpo-46417: Py_Finalize() clears structseq static types. Check that
|
||||
# sys attributes using struct types still work when
|
||||
# Py_Finalize()/Py_Initialize() is called multiple times.
|
||||
# print() calls type->tp_repr(instance) and so checks that the types
|
||||
# are still working properly.
|
||||
script = support.findfile('_test_embed_structseq.py')
|
||||
with open(script, encoding="utf-8") as fp:
|
||||
code = fp.read()
|
||||
out, err = self.run_embedded_interpreter("test_repeated_init_exec", code)
|
||||
self.assertEqual(out, 'Tests passed\n' * INIT_LOOPS)
|
||||
|
||||
|
||||
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||
maxDiff = 4096
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue