File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -895,6 +895,41 @@ def test_register_threads(self):
895895 def test_register_chain (self ):
896896 self .check_register (chain = True )
897897
898+ @unittest .skipIf (not hasattr (faulthandler , "register" ),
899+ "need faulthandler.register" )
900+ def test_register_max_threads (self ):
901+ # register(max_threads=N) caps the thread dump produced when
902+ # the registered signal fires.
903+ code = dedent ("""
904+ import faulthandler
905+ import os
906+ import signal
907+ import threading
908+
909+ NTHREADS = 6
910+ CAP = 3
911+
912+ ready = threading.Barrier(NTHREADS + 1)
913+ stop = threading.Event()
914+
915+ def worker():
916+ ready.wait()
917+ stop.wait()
918+
919+ for _ in range(NTHREADS):
920+ threading.Thread(target=worker, daemon=True).start()
921+ ready.wait()
922+ faulthandler.register(signal.SIGUSR1, all_threads=True,
923+ max_threads=CAP)
924+ os.kill(os.getpid(), signal.SIGUSR1)
925+ """ ).strip ()
926+ proc = script_helper .assert_python_ok ('-c' , code )
927+ output = proc .err
928+ # Cap of 3 means the dump is truncated with "..." on its own line.
929+ self .assertIn (b"\n ...\n " , output )
930+ # Cap of 3 means exactly 3 thread headers in the dump.
931+ self .assertEqual (output .count (b"Thread 0x" ), 3 )
932+
898933 @contextmanager
899934 def check_stderr_none (self ):
900935 stderr = sys .stderr
You can’t perform that action at this time.
0 commit comments