File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -817,6 +817,17 @@ def test_disable_windows_exc_handler(self):
817817 self .assertEqual (output , [])
818818 self .assertEqual (exitcode , 0xC0000005 )
819819
820+ def test_cancel_later_without_dump_traceback_later (self ):
821+ # bpo-37933: Calling cancel_dump_traceback_later()
822+ # without dump_traceback_later() must not segfault.
823+ code = dedent ("""
824+ import faulthandler
825+ faulthandler.cancel_dump_traceback_later()
826+ """ )
827+ output , exitcode = self .get_output (code )
828+ self .assertEqual (output , [])
829+ self .assertEqual (exitcode , 0 )
830+
820831
821832if __name__ == "__main__" :
822833 unittest .main ()
Original file line number Diff line number Diff line change @@ -631,6 +631,11 @@ faulthandler_thread(void *unused)
631631static void
632632cancel_dump_traceback_later (void )
633633{
634+ /* If not scheduled, nothing to cancel */
635+ if (!thread .cancel_event ) {
636+ return ;
637+ }
638+
634639 /* Notify cancellation */
635640 PyThread_release_lock (thread .cancel_event );
636641
You can’t perform that action at this time.
0 commit comments