summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2010-08-10 14:10:51 +0000
committerAlan Conway <aconway@apache.org>2010-08-10 14:10:51 +0000
commit3b71d152920d469f41dce1ab2a7f516053e98994 (patch)
tree2cdba971d1f202846cf3aa2123160c12394d7189 /python
parent7aebb95c7c7d47ef0a991a4a7ed737d1e1a7c1fb (diff)
downloadqpid-python-3b71d152920d469f41dce1ab2a7f516053e98994.tar.gz
Fix test race conditions causing cluster_tests.py:management_test to hang.
Got rid of expect_fail, ignore exceptions in the caller. Avoid concurrent calls to _cleanup, call only from from wait/poll. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@984017 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r--python/qpid/brokertest.py26
1 files changed, 13 insertions, 13 deletions
diff --git a/python/qpid/brokertest.py b/python/qpid/brokertest.py
index 19acfd76ca..523298a492 100644
--- a/python/qpid/brokertest.py
+++ b/python/qpid/brokertest.py
@@ -186,7 +186,6 @@ class Popen(popen2.Popen3):
finally: self._clean_lock.release()
def unexpected(self,msg):
- self._cleanup()
err = error_line(self.outfile("err")) or error_line(self.outfile("out"))
raise BadProcessStatus("%s %s%s" % (self.pname, msg, err))
@@ -210,7 +209,7 @@ class Popen(popen2.Popen3):
elif self.expect == EXPECT_EXIT_FAIL and self.returncode == 0:
self.unexpected("expected error")
finally:
- self._cleanup()
+ self.wait() # Clean up the process.
def communicate(self, input=None):
if input:
@@ -227,26 +226,27 @@ class Popen(popen2.Popen3):
if not self.is_running(): self.unexpected("Exit code %d" % self.returncode)
def poll(self):
- if self.returncode is not None: return self.returncode
- self.returncode = popen2.Popen3.poll(self)
- if (self.returncode == -1): self.returncode = None
- if self.returncode is not None: self._cleanup()
+ if self.returncode is None:
+ ret = popen2.Popen3.poll(self)
+ if (ret != -1):
+ self.returncode = ret
+ self._cleanup()
return self.returncode
def wait(self):
- if self.returncode is not None: return self.returncode
- self.drain()
- try: self.returncode = popen2.Popen3.wait(self)
- except OSError,e: raise OSError("Wait failed %s: %s"%(self.pname, e))
- self._cleanup()
+ if self.returncode is None:
+ self.drain()
+ try: self.returncode = popen2.Popen3.wait(self)
+ except OSError,e: raise OSError("Wait failed %s: %s"%(self.pname, e))
+ self._cleanup()
return self.returncode
def send_signal(self, sig):
try: os.kill(self.pid,sig)
except OSError,e: raise OSError("Kill failed %s: %s"%(self.pname, e))
- def terminate(self): self.send_signal(signal.SIGTERM); self._cleanup()
- def kill(self): self.send_signal(signal.SIGKILL); self._cleanup()
+ def terminate(self): self.send_signal(signal.SIGTERM)
+ def kill(self): self.send_signal(signal.SIGKILL)
def cmd_str(self): return " ".join([str(s) for s in self.cmd])