diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 2d374b9d6c7..ebd99edc8fc 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -72,9 +72,9 @@ class FaultHandlerTests(unittest.TestCase): Raise an error if the output doesn't match the expected format. """ if all_threads: - header = 'Current thread XXX' + header = 'Current thread XXX (most recent call first)' else: - header = 'Traceback (most recent call first)' + header = 'Stack (most recent call first)' regex = """ ^Fatal Python error: {name} @@ -306,7 +306,7 @@ funcA() else: lineno = 8 expected = [ - 'Traceback (most recent call first):', + 'Stack (most recent call first):', ' File "", line %s in funcB' % lineno, ' File "", line 11 in funcA', ' File "", line 13 in ' @@ -338,7 +338,7 @@ def {func_name}(): func_name=func_name, ) expected = [ - 'Traceback (most recent call first):', + 'Stack (most recent call first):', ' File "", line 4 in %s' % truncated, ' File "", line 6 in ' ] @@ -392,13 +392,13 @@ waiter.join() else: lineno = 10 regex = """ -^Thread 0x[0-9a-f]+: +^Thread 0x[0-9a-f]+ \(most recent call first\): (?: File ".*threading.py", line [0-9]+ in [_a-z]+ ){{1,3}} File "", line 23 in run File ".*threading.py", line [0-9]+ in _bootstrap_inner File ".*threading.py", line [0-9]+ in _bootstrap -Current thread XXX: +Current thread XXX \(most recent call first\): File "", line {lineno} in dump File "", line 28 in $ """.strip() @@ -461,7 +461,7 @@ if file is not None: count = loops if repeat: count *= 2 - header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+:\n' % timeout_str + header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+ \(most recent call first\):\n' % timeout_str regex = expected_traceback(9, 20, header, min_count=count) self.assertRegex(trace, regex) else: @@ -563,9 +563,9 @@ sys.exit(exitcode) trace = '\n'.join(trace) if not unregister: if all_threads: - regex = 'Current thread XXX:\n' + regex = 'Current thread XXX \(most recent call first\):\n' else: - regex = 'Traceback \(most recent call first\):\n' + regex = 'Stack \(most recent call first\):\n' regex = expected_traceback(7, 28, regex) self.assertRegex(trace, regex) else: diff --git a/Misc/NEWS b/Misc/NEWS index 8a31887d7f6..379dfd70a5d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,10 +2,21 @@ Python News +++++++++++ -What's New in Python 3.4.0 Alpha 4? -================================ +What's New in Python 3.4.0 Beta 1? +================================== -Projected release date: 2013-10-20 +Projected release date: 2013-11-24 + +Core and Builtins +----------------- + +- Issue 19306: Add extra hints to the faulthandler module's stack + dumps that these are "upside down". + +What's New in Python 3.4.0 Alpha 4? +=================================== + +Release date: 2013-10-20 Core and Builtins ----------------- diff --git a/Python/traceback.c b/Python/traceback.c index 4f2e732779d..01e947315a8 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -471,13 +471,13 @@ dump_decimal(int fd, int value) write(fd, buffer, len); } -/* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits, +/* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits, and write it into the file fd. This function is signal safe. */ static void -dump_hexadecimal(int width, unsigned long value, int fd) +dump_hexadecimal(int fd, unsigned long value, int width) { int len; char buffer[sizeof(unsigned long) * 2 + 1]; @@ -544,15 +544,15 @@ dump_ascii(int fd, PyObject *text) } else if (ch < 0xff) { PUTS(fd, "\\x"); - dump_hexadecimal(2, ch, fd); + dump_hexadecimal(fd, ch, 2); } else if (ch < 0xffff) { PUTS(fd, "\\u"); - dump_hexadecimal(4, ch, fd); + dump_hexadecimal(fd, ch, 4); } else { PUTS(fd, "\\U"); - dump_hexadecimal(8, ch, fd); + dump_hexadecimal(fd, ch, 8); } } if (truncated) @@ -603,7 +603,7 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) unsigned int depth; if (write_header) - PUTS(fd, "Traceback (most recent call first):\n"); + PUTS(fd, "Stack (most recent call first):\n"); frame = _PyThreadState_GetFrame(tstate); if (frame == NULL) @@ -641,8 +641,8 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) PUTS(fd, "Current thread 0x"); else PUTS(fd, "Thread 0x"); - dump_hexadecimal(sizeof(long)*2, (unsigned long)tstate->thread_id, fd); - PUTS(fd, ":\n"); + dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2); + PUTS(fd, " (most recent call first):\n"); } const char*