bpo-36250: ignore ValueError from signal in non-main thread (GH-12251)
Authored-By: blueyed <github@thequod.de>
This commit is contained in:
parent
19052a1131
commit
8d64bfafdf
|
@ -340,7 +340,11 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||||
def interaction(self, frame, traceback):
|
def interaction(self, frame, traceback):
|
||||||
# Restore the previous signal handler at the Pdb prompt.
|
# Restore the previous signal handler at the Pdb prompt.
|
||||||
if Pdb._previous_sigint_handler:
|
if Pdb._previous_sigint_handler:
|
||||||
|
try:
|
||||||
signal.signal(signal.SIGINT, Pdb._previous_sigint_handler)
|
signal.signal(signal.SIGINT, Pdb._previous_sigint_handler)
|
||||||
|
except ValueError: # ValueError: signal only works in main thread
|
||||||
|
pass
|
||||||
|
else:
|
||||||
Pdb._previous_sigint_handler = None
|
Pdb._previous_sigint_handler = None
|
||||||
if self.setup(frame, traceback):
|
if self.setup(frame, traceback):
|
||||||
# no interaction desired at this time (happens if .pdbrc contains
|
# no interaction desired at this time (happens if .pdbrc contains
|
||||||
|
|
|
@ -1333,6 +1333,35 @@ class PdbTestCase(unittest.TestCase):
|
||||||
self.assertNotIn('Error', stdout.decode(),
|
self.assertNotIn('Error', stdout.decode(),
|
||||||
"Got an error running test script under PDB")
|
"Got an error running test script under PDB")
|
||||||
|
|
||||||
|
def test_issue36250(self):
|
||||||
|
|
||||||
|
with open(support.TESTFN, 'wb') as f:
|
||||||
|
f.write(textwrap.dedent("""
|
||||||
|
import threading
|
||||||
|
import pdb
|
||||||
|
|
||||||
|
evt = threading.Event()
|
||||||
|
|
||||||
|
def start_pdb():
|
||||||
|
evt.wait()
|
||||||
|
pdb.Pdb(readrc=False).set_trace()
|
||||||
|
|
||||||
|
t = threading.Thread(target=start_pdb)
|
||||||
|
t.start()
|
||||||
|
pdb.Pdb(readrc=False).set_trace()
|
||||||
|
evt.set()
|
||||||
|
t.join()""").encode('ascii'))
|
||||||
|
cmd = [sys.executable, '-u', support.TESTFN]
|
||||||
|
proc = subprocess.Popen(cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT,
|
||||||
|
)
|
||||||
|
self.addCleanup(proc.stdout.close)
|
||||||
|
stdout, stderr = proc.communicate(b'cont\ncont\n')
|
||||||
|
self.assertNotIn('Error', stdout.decode(),
|
||||||
|
"Got an error running test script under PDB")
|
||||||
|
|
||||||
def test_issue16180(self):
|
def test_issue16180(self):
|
||||||
# A syntax error in the debuggee.
|
# A syntax error in the debuggee.
|
||||||
script = "def f: pass\n"
|
script = "def f: pass\n"
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Ignore ``ValueError`` from ``signal`` with ``interaction`` in non-main
|
||||||
|
thread.
|
Loading…
Reference in New Issue