signal.alarm is not available in Windows and would trigger an exception when called. Implemented this to mentain compatibility between Windows and Linux for python tests.
Signed-off-by: Paul-Daniel Boca <pb...@cloudbasesolutions.com> --- V2: No changes V3: Code styling changes V4: No changes V5: No changes V6: No changes V7: Added function signal_alarm in fatal_signal.py to avoid duplicating code --- python/ovs/fatal_signal.py | 24 +++++++++++++++++++++++- tests/appctl.py | 4 ++-- tests/test-ovsdb.py | 4 ++-- tests/test-unix-socket.py | 3 ++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/python/ovs/fatal_signal.py b/python/ovs/fatal_signal.py index 7308039..14605ac 100644 --- a/python/ovs/fatal_signal.py +++ b/python/ovs/fatal_signal.py @@ -15,7 +15,7 @@ import atexit import os import signal - +import sys import ovs.vlog _hooks = [] @@ -134,3 +134,25 @@ def _init(): if signal.getsignal(signr) == signal.SIG_DFL: signal.signal(signr, _signal_handler) atexit.register(_atexit_handler) + + +def signal_alarm(timeout): + if sys.platform == "win32": + import os + import time + import threading + + class Alarm (threading.Thread): + def __init__(self, timeout): + super(Alarm, self).__init__() + self.timeout = timeout + self.setDaemon(True) + + def run(self): + time.sleep(self.timeout) + os._exit(1) + + alarm = Alarm(timeout) + alarm.start() + else: + signal.alarm(timeout) diff --git a/tests/appctl.py b/tests/appctl.py index e5bcf2c..e4f0696 100644 --- a/tests/appctl.py +++ b/tests/appctl.py @@ -13,7 +13,6 @@ # limitations under the License. import argparse -import signal import sys import ovs.daemon @@ -21,6 +20,7 @@ import ovs.unixctl import ovs.unixctl.client import ovs.util import ovs.vlog +from ovs.fatal_signal import signal_alarm def connect_to_target(target): @@ -52,7 +52,7 @@ def main(): args = parser.parse_args() if args.timeout: - signal.alarm(int(args.timeout)) + signal_alarm(int(args.timeout)) ovs.vlog.Vlog.init() target = args.target diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py index 42d36d4..c75be4b 100644 --- a/tests/test-ovsdb.py +++ b/tests/test-ovsdb.py @@ -17,7 +17,6 @@ from __future__ import print_function import getopt import re import os -import signal import sys import uuid @@ -29,6 +28,7 @@ import ovs.db.types import ovs.ovsuuid import ovs.poller import ovs.util +from ovs.fatal_signal import signal_alarm import six @@ -612,7 +612,7 @@ def main(argv): except TypeError: raise error.Error("value %s on -t or --timeout is not at " "least 1" % value) - signal.alarm(timeout) + signal_alarm(timeout) else: sys.exit(0) diff --git a/tests/test-unix-socket.py b/tests/test-unix-socket.py index ebfa054..c80fb13 100644 --- a/tests/test-unix-socket.py +++ b/tests/test-unix-socket.py @@ -19,6 +19,7 @@ import socket import sys import ovs.socket_util +from ovs.fatal_signal import signal_alarm def main(argv): @@ -33,7 +34,7 @@ def main(argv): sockname2 = sockname1 signal.signal(signal.SIGALRM, signal.SIG_DFL) - signal.alarm(5) + signal_alarm(5) # Create a listening socket under name 'sockname1'. error, sock1 = ovs.socket_util.make_unix_socket(socket.SOCK_STREAM, False, -- 2.7.2.windows.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev