gh-128400: Only show the current thread in Py_FatalError
on the free-threaded build (#128758)
This commit is contained in:
parent
4533036e50
commit
bf64a582f0
@ -75,6 +75,8 @@ class InstanceMethod:
|
||||
id = _testcapi.instancemethod(id)
|
||||
testfunction = _testcapi.instancemethod(testfunction)
|
||||
|
||||
CURRENT_THREAD_REGEX = r'Current thread.*:\n' if not support.Py_GIL_DISABLED else r'Stack .*:\n'
|
||||
|
||||
class CAPITest(unittest.TestCase):
|
||||
|
||||
def test_instancemethod(self):
|
||||
@ -234,8 +236,8 @@ class CAPITest(unittest.TestCase):
|
||||
r'Python runtime state: initialized\n'
|
||||
r'SystemError: <built-in function return_null_without_error> '
|
||||
r'returned NULL without setting an exception\n'
|
||||
r'\n'
|
||||
r'Current thread.*:\n'
|
||||
r'\n' +
|
||||
CURRENT_THREAD_REGEX +
|
||||
r' File .*", line 6 in <module>\n')
|
||||
else:
|
||||
with self.assertRaises(SystemError) as cm:
|
||||
@ -268,8 +270,8 @@ class CAPITest(unittest.TestCase):
|
||||
r'SystemError: <built-in '
|
||||
r'function return_result_with_error> '
|
||||
r'returned a result with an exception set\n'
|
||||
r'\n'
|
||||
r'Current thread.*:\n'
|
||||
r'\n' +
|
||||
CURRENT_THREAD_REGEX +
|
||||
r' File .*, line 6 in <module>\n')
|
||||
else:
|
||||
with self.assertRaises(SystemError) as cm:
|
||||
@ -298,8 +300,8 @@ class CAPITest(unittest.TestCase):
|
||||
r'with an exception set\n'
|
||||
r'Python runtime state: initialized\n'
|
||||
r'ValueError: bug\n'
|
||||
r'\n'
|
||||
r'Current thread .* \(most recent call first\):\n'
|
||||
r'\n' +
|
||||
CURRENT_THREAD_REGEX +
|
||||
r' File .*, line 6 in <module>\n'
|
||||
r'\n'
|
||||
r'Extension modules: _testcapi \(total: 1\)\n')
|
||||
|
@ -101,8 +101,7 @@ class FaultHandlerTests(unittest.TestCase):
|
||||
Raise an error if the output doesn't match the expected format.
|
||||
"""
|
||||
all_threads_disabled = (
|
||||
(not py_fatal_error)
|
||||
and all_threads
|
||||
all_threads
|
||||
and (not sys._is_gil_enabled())
|
||||
)
|
||||
if all_threads and not all_threads_disabled:
|
||||
@ -116,12 +115,15 @@ class FaultHandlerTests(unittest.TestCase):
|
||||
if py_fatal_error:
|
||||
regex.append("Python runtime state: initialized")
|
||||
regex.append('')
|
||||
if all_threads_disabled:
|
||||
if all_threads_disabled and not py_fatal_error:
|
||||
regex.append("<Cannot show all threads while the GIL is disabled>")
|
||||
regex.append(fr'{header} \(most recent call first\):')
|
||||
if garbage_collecting and not all_threads_disabled:
|
||||
regex.append(' Garbage-collecting')
|
||||
regex.append(fr' File "<string>", line {lineno} in {function}')
|
||||
if support.Py_GIL_DISABLED and py_fatal_error and not know_current_thread:
|
||||
regex.append(" <tstate is freed>")
|
||||
else:
|
||||
if garbage_collecting and not all_threads_disabled:
|
||||
regex.append(' Garbage-collecting')
|
||||
regex.append(fr' File "<string>", line {lineno} in {function}')
|
||||
regex = '\n'.join(regex)
|
||||
|
||||
if other_regex:
|
||||
|
@ -0,0 +1,2 @@
|
||||
:c:func:`Py_FatalError` no longer shows all threads on the :term:`free
|
||||
threaded <free threading>` build to prevent crashes.
|
@ -3034,7 +3034,11 @@ _Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
|
||||
PUTS(fd, "\n");
|
||||
|
||||
/* display the current Python stack */
|
||||
#ifndef Py_GIL_DISABLED
|
||||
_Py_DumpTracebackThreads(fd, interp, tstate);
|
||||
#else
|
||||
_Py_DumpTraceback(fd, tstate);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Print the current exception (if an exception is set) with its traceback,
|
||||
|
Loading…
x
Reference in New Issue
Block a user