From: Daniel Axtens Date: Tue, 14 Sep 2010 02:47:59 +0000 (+0800) Subject: changed externAgent so as to never permit more than MAX_TOTAL_AGENTS to exist X-Git-Tag: v02~3^2~5^2 X-Git-Url: https://git.ucc.asn.au/?p=progcomp10.git;a=commitdiff_plain;h=eac442be1d9b79594f8da14b0340a9d7c037ec92 changed externAgent so as to never permit more than MAX_TOTAL_AGENTS to exist --- diff --git a/src/link/externAgent.py b/src/link/externAgent.py index 6112482..d3e3af1 100644 --- a/src/link/externAgent.py +++ b/src/link/externAgent.py @@ -110,13 +110,30 @@ class externAgent (BaseAgent): self.process.stdin.write ( string ) self.process.stdout.readline() # read and discard (should be "OK") + # we kill off the process here because otherwise the class doesn't get + # destroyed until the end of the iteration. This causes us to hold more + # than MAX_TOTAL_AGENTS open for a period of time, which is a bad thing. + if self.IsDead(): + try: + self.process.communicate( "BYE\r\n" ) + except Exception, e: + print "Error in BYE:", self, ":", e + + try: + self.process.kill() + except: + None + + def __del__(self): - try: - self.process.communicate( "BYE\r\n" ) - except Exception, e: - print "Error in BYE:", self, ":", e + #unless we're being deleted unexpectedly, this is a no-op. + if self.process.poll() == None: + try: + self.process.communicate( "BYE\r\n" ) + except Exception, e: + print "Error in BYE:", self, ":", e - try: - self.process.kill() - except: - None \ No newline at end of file + try: + self.process.kill() + except: + None