bpo-37933: Fix faulthandler.cancel_dump_traceback_later() (GH-15440)

Fix faulthandler.cancel_dump_traceback_later() call
if cancel_dump_traceback_later() was not called previously.
This commit is contained in:
Thomas A Caswell 2019-08-29 12:30:04 -04:00 committed by Victor Stinner
parent 88ea166dad
commit e278335a6e
2 changed files with 16 additions and 0 deletions

View File

@ -817,6 +817,17 @@ class FaultHandlerTests(unittest.TestCase):
self.assertEqual(output, [])
self.assertEqual(exitcode, 0xC0000005)
def test_cancel_later_without_dump_traceback_later(self):
# bpo-37933: Calling cancel_dump_traceback_later()
# without dump_traceback_later() must not segfault.
code = dedent("""
import faulthandler
faulthandler.cancel_dump_traceback_later()
""")
output, exitcode = self.get_output(code)
self.assertEqual(output, [])
self.assertEqual(exitcode, 0)
if __name__ == "__main__":
unittest.main()

View File

@ -631,6 +631,11 @@ faulthandler_thread(void *unused)
static void
cancel_dump_traceback_later(void)
{
/* If not scheduled, nothing to cancel */
if (!thread.cancel_event) {
return;
}
/* Notify cancellation */
PyThread_release_lock(thread.cancel_event);