Skip to content

Commit 35beff8

Browse files
simple fix (ctrl-c handling probably doesn't work in all cases)
1 parent 97a4c9d commit 35beff8

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

bpython/curtsiesfrontend/coderunner.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"""
1414

1515
import code
16+
import threading
1617
import signal
1718
import greenlet
1819
import logging
@@ -130,16 +131,19 @@ def run_code(self, for_code=None):
130131
if source code is complete, returns "done"
131132
if source code is incomplete, returns "unfinished"
132133
"""
134+
is_main_thread = isinstance(threading.current_thread(), threading._MainThread)
133135
if self.code_context is None:
134136
assert self.source is not None
135137
self.code_context = greenlet.greenlet(self._blocking_run_code)
136-
self.orig_sigint_handler = signal.getsignal(signal.SIGINT)
137-
signal.signal(signal.SIGINT, self.sigint_handler)
138+
if is_main_thread:
139+
self.orig_sigint_handler = signal.getsignal(signal.SIGINT)
140+
signal.signal(signal.SIGINT, self.sigint_handler)
138141
request = self.code_context.switch()
139142
else:
140143
assert self.code_is_waiting
141144
self.code_is_waiting = False
142-
signal.signal(signal.SIGINT, self.sigint_handler)
145+
if is_main_thread:
146+
signal.signal(signal.SIGINT, self.sigint_handler)
143147
if self.sigint_happened_in_main_context:
144148
self.sigint_happened_in_main_context = False
145149
request = self.code_context.switch(SigintHappened)
@@ -157,7 +161,8 @@ def run_code(self, for_code=None):
157161
return False
158162
elif isinstance(request, (Done, Unfinished)):
159163
self._unload_code()
160-
signal.signal(signal.SIGINT, self.orig_sigint_handler)
164+
if is_main_thread:
165+
signal.signal(signal.SIGINT, self.orig_sigint_handler)
161166
self.orig_sigint_handler = None
162167
return request
163168
elif isinstance(request, SystemExitRequest):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy