From: John Hodge Date: Tue, 14 Sep 2010 03:32:57 +0000 (+0800) Subject: Merge branch 'c-agents' of git.ucc.asn.au:progcomp10 into c-agents X-Git-Tag: v02~3^2~5 X-Git-Url: https://git.ucc.asn.au/?p=progcomp10.git;a=commitdiff_plain;h=a0cb577297def75ed27724fd8812cafeafbe2c73;hp=f23a69f735f155d06e6e8f47e85bc9266957803f Merge branch 'c-agents' of git.ucc.asn.au:progcomp10 into c-agents --- 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