From 998f81646eda4ab2238ff1080ae75997b28fcb3d Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Sun, 12 Jun 2011 12:37:23 +0200 Subject: [PATCH] bugfix: EINTRs caught --- src/nepi/testbeds/netns/execute.py | 3 +++ src/nepi/testbeds/ns3/execute.py | 10 ++++++---- src/nepi/util/server.py | 12 +++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/nepi/testbeds/netns/execute.py b/src/nepi/testbeds/netns/execute.py index a76547a1..9ac839f0 100644 --- a/src/nepi/testbeds/netns/execute.py +++ b/src/nepi/testbeds/netns/execute.py @@ -12,6 +12,9 @@ class TestbedController(testbed_impl.TestbedController): from nepi.util.tunchannel_impl import TunChannel class HostLock(object): + # This class is used as a lock to prevent concurrency issues with more + # than one instance of netns running in the same machine. Both in + # different processes or different threads. taken = False processcond = threading.Condition() diff --git a/src/nepi/testbeds/ns3/execute.py b/src/nepi/testbeds/ns3/execute.py index 754c2067..5f9bb72f 100644 --- a/src/nepi/testbeds/ns3/execute.py +++ b/src/nepi/testbeds/ns3/execute.py @@ -55,6 +55,7 @@ class TestbedController(testbed_impl.TestbedController): self._condition = threading.Condition() self._simulator_thread = threading.Thread(target = self._simulator_run, args = [self._condition]) + self._simulator_thread.setDaemon(True) self._simulator_thread.start() def stop(self, time = TIME_NOW): @@ -130,10 +131,11 @@ class TestbedController(testbed_impl.TestbedController): element.Cleanup() self._elements.clear() if self.ns3: - #self.ns3.Simulator.Stop() - self._stop_simulation("0s") - if self._simulator_thread: - self._simulator_thread.join() + self.ns3.Simulator.Stop() + #self._stop_simulation("0s") + # TODO!!!! SHOULD WAIT UNTIL THE THREAD FINISHES + # if self._simulator_thread: + # self._simulator_thread.join() self.ns3.Simulator.Destroy() self._ns3 = None sys.stdout.flush() diff --git a/src/nepi/util/server.py b/src/nepi/util/server.py index aa39343e..0491b550 100644 --- a/src/nepi/util/server.py +++ b/src/nepi/util/server.py @@ -32,8 +32,6 @@ if hasattr(os, "devnull"): else: DEV_NULL = "/dev/null" - - SHELL_SAFE = re.compile('^[-a-zA-Z0-9_=+:.,/]*$') def shell_escape(s): @@ -88,7 +86,15 @@ class Server(object): pid1 = os.fork() if pid1 > 0: os.close(w) - os.read(r, 1) + while True: + try: + os.read(r, 1) + except OSError, e: # pragma: no cover + if e.errno == errno.EINTR: + continue + else: + raise + break os.close(r) # os.waitpid avoids leaving a (zombie) process st = os.waitpid(pid1, 0)[1] -- 2.47.0