diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2012-07-31 02:55:49 +0200 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2012-07-31 02:55:49 +0200 |
commit | d5698cbbcade36d49bb32e797499d1190c38558a (patch) | |
tree | 4c743f1ff57018f73dc118ebb08b97edbd83b260 | |
parent | 60622ed12aed572573a95b88428f654e88b8e470 (diff) | |
download | cpython-git-d5698cbbcade36d49bb32e797499d1190c38558a.tar.gz |
Fix initialization of the faulthandler module
faulthandler requires the importlib if "-X faulthandler" option is present on
the command line, so initialize faulthandler after importlib.
Add also an unit test.
-rw-r--r-- | Lib/test/test_faulthandler.py | 15 | ||||
-rw-r--r-- | Python/pythonrun.c | 8 |
2 files changed, 19 insertions, 4 deletions
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 1138f8f133..8c12b213d0 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -7,6 +7,7 @@ import signal import subprocess import sys from test import support, script_helper +from test.script_helper import assert_python_ok import tempfile import unittest @@ -256,6 +257,20 @@ faulthandler._read_null() finally: sys.stderr = orig_stderr + def test_disabled_by_default(self): + # By default, the module should be disabled + code = "import faulthandler; print(faulthandler.is_enabled())" + rc, stdout, stderr = assert_python_ok("-c", code) + stdout = (stdout + stderr).strip() + self.assertEqual(stdout, b"False") + + def test_sys_xoptions(self): + # Test python -X faulthandler + code = "import faulthandler; print(faulthandler.is_enabled())" + rc, stdout, stderr = assert_python_ok("-X", "faulthandler", "-c", code) + stdout = (stdout + stderr).strip() + self.assertEqual(stdout, b"True") + def check_dump_traceback(self, filename): """ Explicitly call dump_traceback() function and check its output. diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 6ee9a5fddf..cafc09ac3f 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -356,10 +356,6 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) _PyImportHooks_Init(); - /* initialize the faulthandler module */ - if (_PyFaulthandler_Init()) - Py_FatalError("Py_Initialize: can't initialize faulthandler"); - /* Initialize _warnings. */ _PyWarnings_Init(); @@ -368,6 +364,10 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) import_init(interp, sysmod); + /* initialize the faulthandler module */ + if (_PyFaulthandler_Init()) + Py_FatalError("Py_Initialize: can't initialize faulthandler"); + _PyTime_Init(); if (initfsencoding(interp) < 0) |