[Python-checkins] cpython: Issue #25122: try to debug test_eintr hang on FreeBSD

victor.stinner python-checkins at python.org
Tue Sep 15 12:19:35 CEST 2015


https://hg.python.org/cpython/rev/3d9164aecc6f
changeset: 98006:3d9164aecc6f
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Sep 15 12:15:59 2015 +0200
summary:
 Issue #25122: try to debug test_eintr hang on FreeBSD
* Add verbose mode to test_eintr
* Always enable verbose mode in test_eintr
* Use faulthandler.dump_traceback_later() with a timeout of 15 minutes in
 eintr_tester.py
files:
 Lib/test/eintrdata/eintr_tester.py | 8 ++++++++
 Lib/test/test_eintr.py | 12 +++++++++++-
 2 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py
--- a/Lib/test/eintrdata/eintr_tester.py
+++ b/Lib/test/eintrdata/eintr_tester.py
@@ -8,6 +8,7 @@
 sub-second periodicity (contrarily to signal()).
 """
 
+import faulthandler
 import io
 import os
 import select
@@ -36,12 +37,19 @@
 @classmethod
 def setUpClass(cls):
 cls.orig_handler = signal.signal(signal.SIGALRM, lambda *args: None)
+ if hasattr(faulthandler, 'dump_traceback_later'):
+ # Most tests take less than 30 seconds, so 15 minutes should be
+ # enough. dump_traceback_later() is implemented with a thread, but
+ # pthread_sigmask() is used to mask all signaled on this thread.
+ faulthandler.dump_traceback_later(5 * 60, exit=True)
 signal.setitimer(signal.ITIMER_REAL, cls.signal_delay,
 cls.signal_period)
 
 @classmethod
 def stop_alarm(cls):
 signal.setitimer(signal.ITIMER_REAL, 0, 0)
+ if hasattr(faulthandler, 'cancel_dump_traceback_later'):
+ faulthandler.cancel_dump_traceback_later()
 
 @classmethod
 def tearDownClass(cls):
diff --git a/Lib/test/test_eintr.py b/Lib/test/test_eintr.py
--- a/Lib/test/test_eintr.py
+++ b/Lib/test/test_eintr.py
@@ -1,5 +1,7 @@
 import os
 import signal
+import subprocess
+import sys
 import unittest
 
 from test import support
@@ -14,7 +16,15 @@
 # Run the tester in a sub-process, to make sure there is only one
 # thread (for reliable signal delivery).
 tester = support.findfile("eintr_tester.py", subdir="eintrdata")
- script_helper.assert_python_ok(tester)
+
+ # FIXME: Issue #25122, always run in verbose mode to debug hang on FreeBSD
+ if True: #support.verbose:
+ args = [sys.executable, tester]
+ with subprocess.Popen(args, stdout=sys.stderr) as proc:
+ exitcode = proc.wait()
+ self.assertEqual(exitcode, 0)
+ else:
+ script_helper.assert_python_ok(tester)
 
 
 if __name__ == "__main__":
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /