From eac442be1d9b79594f8da14b0340a9d7c037ec92 Mon Sep 17 00:00:00 2001
From: Daniel Axtens <dja@ucc.asn.au>
Date: Tue, 14 Sep 2010 10:47:59 +0800
Subject: [PATCH] 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
-- 
GitLab