changed externAgent so as to never permit more than MAX_TOTAL_AGENTS to exist
authorDaniel Axtens <[email protected]>
Tue, 14 Sep 2010 02:47:59 +0000 (10:47 +0800)
committerDaniel Axtens <[email protected]>
Tue, 14 Sep 2010 02:47:59 +0000 (10:47 +0800)
src/link/externAgent.py

index 6112482..d3e3af1 100644 (file)
@@ -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

UCC git Repository :: git.ucc.asn.au