]> granicus.if.org Git - python/commitdiff
Fix initialization of the faulthandler module
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 31 Jul 2012 00:55:49 +0000 (02:55 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 31 Jul 2012 00:55:49 +0000 (02:55 +0200)
faulthandler requires the importlib if "-X faulthandler" option is present on
the command line, so initialize faulthandler after importlib.

Add also an unit test.

Lib/test/test_faulthandler.py
Python/pythonrun.c

index 1138f8f13311bbe0e724aea348e3998ca432b399..8c12b213d00024ad6e0cc5abbf3b7360bfc1b4ad 100644 (file)
@@ -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.
index 6ee9a5fddfc04659982112967e5bbec51a84b944..cafc09ac3f5f1532d95cc8247426fecf86c5af95 100644 (file)
@@ -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)