Skip to content

Commit 51d208e

Browse files
maxnordlundsebastinas
authored andcommitted
Allow bpython/bpdb outside main thread
Because [signal.signal][1] is only allowed to be called from the main thread, if you use bpdb in another thread it will crash upon entering the repl. By ignoring the resulting `ValueError` the show can go on. [1]: https://docs.python.org/3/library/signal.html#signal.signal
1 parent 6be4207 commit 51d208e

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

bpython/curtsiesfrontend/repl.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -531,8 +531,12 @@ def __enter__(self):
531531
sys.stdin = self.stdin
532532
self.orig_sigwinch_handler = signal.getsignal(signal.SIGWINCH)
533533
self.orig_sigtstp_handler = signal.getsignal(signal.SIGTSTP)
534-
signal.signal(signal.SIGWINCH, self.sigwinch_handler)
535-
signal.signal(signal.SIGTSTP, self.sigtstp_handler)
534+
535+
try:
536+
signal.signal(signal.SIGWINCH, self.sigwinch_handler)
537+
signal.signal(signal.SIGTSTP, self.sigtstp_handler)
538+
except ValueError:
539+
pass # Ignore "signal only works in main thread"
536540

537541
self.orig_meta_path = sys.meta_path
538542
if self.watcher:
@@ -545,8 +549,13 @@ def __exit__(self, *args):
545549
sys.stdin = self.orig_stdin
546550
sys.stdout = self.orig_stdout
547551
sys.stderr = self.orig_stderr
548-
signal.signal(signal.SIGWINCH, self.orig_sigwinch_handler)
549-
signal.signal(signal.SIGTSTP, self.orig_sigtstp_handler)
552+
553+
try:
554+
signal.signal(signal.SIGWINCH, self.orig_sigwinch_handler)
555+
signal.signal(signal.SIGTSTP, self.orig_sigtstp_handler)
556+
except ValueError:
557+
pass # Ignore "signal only works in main thread"
558+
550559
sys.meta_path = self.orig_meta_path
551560

552561
def sigwinch_handler(self, signum, frame):

0 commit comments

Comments
 (0)