From eac442be1d9b79594f8da14b0340a9d7c037ec92 Mon Sep 17 00:00:00 2001 From: Daniel Axtens Date: Tue, 14 Sep 2010 10:47:59 +0800 Subject: [PATCH 1/1] changed externAgent so as to never permit more than MAX_TOTAL_AGENTS to exist --- src/link/externAgent.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) 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 -- 2.20.1