Skip to content

Commit

Permalink
Test atexit shutdown mechanism in a subprocess (#4828)
Browse files Browse the repository at this point in the history
* Test atexit shutdown mechanism in a subprocess
  • Loading branch information
pitrou authored Dec 13, 2017
1 parent 317def9 commit fc5db95
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
16 changes: 16 additions & 0 deletions Lib/test/test_atexit.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io
import atexit
from test import support
from test.support import script_helper

### helpers
def h1():
Expand Down Expand Up @@ -152,6 +153,21 @@ def test_bound_methods(self):
atexit._run_exitfuncs()
self.assertEqual(l, [5])

def test_shutdown(self):
# Actually test the shutdown mechanism in a subprocess
code = """if 1:
import atexit
def f(msg):
print(msg)
atexit.register(f, "one")
atexit.register(f, "two")
"""
res = script_helper.assert_python_ok("-c", code)
self.assertEqual(res.out.decode().splitlines(), ["two", "one"])
self.assertFalse(res.err)


@support.cpython_only
class SubinterpreterTest(unittest.TestCase):
Expand Down
2 changes: 2 additions & 0 deletions Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -2086,6 +2086,8 @@ _Py_FatalInitError(_PyInitError err)
/* For the atexit module. */
void _Py_PyAtExit(void (*func)(void))
{
/* Guard against API misuse (see bpo-17852) */
assert(_PyRuntime.pyexitfunc == NULL || _PyRuntime.pyexitfunc == func);
_PyRuntime.pyexitfunc = func;
}

Expand Down

0 comments on commit fc5db95

Please sign in to comment.