Skip to content

Commit c29c7f5

Browse files
committed
Register signals only if on MainThread.
Also removed possibility to disable registering signal handlers.
1 parent 9446cb8 commit c29c7f5

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

src/robotremoteserver.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,9 @@ def _register_functions(self, server):
9090
server.register_function(self.get_keyword_documentation)
9191
server.register_function(self.stop_serve, 'stop_remote_server')
9292

93-
def serve(self, stop_with_signals=True, log=True):
93+
def serve(self, log=True):
9494
"""Start the server and wait for it to finish.
9595
96-
:param stop_with_signals: Controls should INT, TERM and HUP signals be
97-
registered to stop serving. Can be disabled, for example,
98-
if running this method on a thread where registering
99-
signals is not possible.
10096
:param log: Log message about startup or not.
10197
10298
Using this requires using ``serve=False`` when creating initializing
@@ -110,7 +106,7 @@ def serve(self, stop_with_signals=True, log=True):
110106
is initialized. Calling :meth:`force_stop_serve` stops the server
111107
unconditionally.
112108
"""
113-
self._server.serve(stop_with_signals, log)
109+
self._server.serve(log=log)
114110

115111
def stop_serve(self, log=True):
116112
"""Stop the server started by :meth:`serve`.
@@ -216,22 +212,25 @@ def _announce_end(self, log_end, port_file):
216212
if port_file and os.path.exists(port_file):
217213
os.remove(port_file) # TODO: Document that port file is removed
218214

219-
def serve(self, stop_with_signals=True, log=True):
215+
def serve(self, log=True):
220216
self._stop_serve = threading.Event()
221-
with self._stop_signals(stop_with_signals):
217+
with self._stop_signals():
222218
self.start(log)
223219
while not self._stop_serve.is_set():
224220
self._stop_serve.wait(1)
225221
self._stop_serve = None
226222
self.stop(log)
227223

228224
@contextmanager
229-
def _stop_signals(self, stop_with_signals=True):
225+
def _stop_signals(self):
230226
original = {}
231-
handler = lambda signum, frame: self.stop_serve()
232-
for name in 'SIGINT', 'SIGTERM', 'SIGHUP':
233-
if stop_with_signals and hasattr(signal, name):
234-
original[name] = signal.signal(getattr(signal, name), handler)
227+
stop = lambda signum, frame: self.stop_serve()
228+
try:
229+
for name in 'SIGINT', 'SIGTERM', 'SIGHUP':
230+
if hasattr(signal, name):
231+
original[name] = signal.signal(getattr(signal, name), stop)
232+
except ValueError: # Not in main thread
233+
pass
235234
try:
236235
yield
237236
finally:

test/utest/test_interactive.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
class Library(object):
1313

14-
def keyword(self):
14+
def kw(self):
1515
return 42
1616

1717

@@ -25,17 +25,17 @@ def test_serve(self):
2525
with self._server_thread():
2626
uri = self._wait_until_started()
2727
try:
28-
self.assertEqual(Remote(uri).run_keyword('keyword', (), None), 42)
28+
self.assertEqual(Remote(uri).run_keyword('kw', (), None), 42)
2929
finally:
3030
self.assertEqual(self.server.stop_serve(log=False), True)
3131
self._wait_until_stopped(uri)
3232
self.assertEqual(self.server.stop_serve(log=False), True)
3333
self.assertEqual(test_remote_server(uri, log=False), False)
3434

3535
@contextmanager
36-
def _server_thread(self, server=None):
36+
def _server_thread(self):
3737
thread = threading.Thread(target=self.server.serve,
38-
kwargs={'stop_with_signals': False, 'log': False})
38+
kwargs={'log': False})
3939
thread.start()
4040
try:
4141
yield
@@ -64,7 +64,7 @@ def test_start_and_stop(self):
6464
self.server.start()
6565
uri = 'http://%s:%s' % self.server.server_address
6666
try:
67-
self.assertEqual(Remote(uri).run_keyword('keyword', (), None), 42)
67+
self.assertEqual(Remote(uri).run_keyword('kw', (), None), 42)
6868
finally:
6969
self.server.stop()
7070
self.assertEqual(test_remote_server(uri, log=False), False)
@@ -79,7 +79,7 @@ def test_stop_remote_server_works_with_serve(self):
7979

8080
def test_stop_remote_server_can_be_disabled_with_serve(self):
8181
self.server = RobotRemoteServer(Library(), port=0, serve=False,
82-
allow_stop=False)
82+
allow_stop=False)
8383
with self._server_thread():
8484
uri = self._wait_until_started()
8585
self.assertEqual(test_remote_server(uri, log=False), True)

0 commit comments

Comments
 (0)