mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
bpo-42639: Move atexit state to PyInterpreterState (GH-23763)
* Add _PyAtExit_Call() function and remove pyexitfunc and pyexitmodule members of PyInterpreterState. The function logs atexit callback errors using _PyErr_WriteUnraisableMsg(). * Add _PyAtExit_Init() and _PyAtExit_Fini() functions. * Remove traverse, clear and free functions of the atexit module. Co-authored-by: Dong-hee Na <donghee.na@python.org>
This commit is contained in:
parent
8473cf89bd
commit
b8fa135908
7 changed files with 101 additions and 113 deletions
|
|
@ -170,6 +170,24 @@ class GeneralTest(unittest.TestCase):
|
|||
self.assertEqual(res.out.decode().splitlines(), ["two", "one"])
|
||||
self.assertFalse(res.err)
|
||||
|
||||
def test_atexit_instances(self):
|
||||
# bpo-42639: It is safe to have more than one atexit instance.
|
||||
code = textwrap.dedent("""
|
||||
import sys
|
||||
import atexit as atexit1
|
||||
del sys.modules['atexit']
|
||||
import atexit as atexit2
|
||||
del sys.modules['atexit']
|
||||
|
||||
assert atexit2 is not atexit1
|
||||
|
||||
atexit1.register(print, "atexit1")
|
||||
atexit2.register(print, "atexit2")
|
||||
""")
|
||||
res = script_helper.assert_python_ok("-c", code)
|
||||
self.assertEqual(res.out.decode().splitlines(), ["atexit2", "atexit1"])
|
||||
self.assertFalse(res.err)
|
||||
|
||||
|
||||
@support.cpython_only
|
||||
class SubinterpreterTest(unittest.TestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue