TunChannel finalization fix
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Mon, 16 May 2011 15:38:35 +0000 (17:38 +0200)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Mon, 16 May 2011 15:38:35 +0000 (17:38 +0200)
src/nepi/testbeds/netns/execute.py
src/nepi/testbeds/ns3/execute.py

index 67dee91..db99bed 100644 (file)
@@ -7,6 +7,8 @@ from nepi.util.constants import TIME_NOW
 import os
 
 class TestbedController(testbed_impl.TestbedController):
+    from nepi.util.tunchannel_impl import TunChannel
+
     def __init__(self, testbed_version):
         super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
         self._netns = None
@@ -54,7 +56,10 @@ class TestbedController(testbed_impl.TestbedController):
         for trace in self._traces.values():
             trace.close()
         for element in self._elements.values():
-            element.destroy()
+            if isinstance(element, self.TunChannel):
+                element.Cleanup()
+            else:
+                element.destroy()
 
     def trace_filename(self, guid, trace_id):
         # TODO: Need to be defined inside a home!!!! with and experiment id_code
index 94f4335..d3b3307 100644 (file)
@@ -18,6 +18,8 @@ class TestbedController(testbed_impl.TestbedController):
     LOCAL_FACTORIES = {
         'ns3::Nepi::TunChannel' : TunChannel,
     }
+    
+    LOCAL_TYPES = tuple(LOCAL_FACTORIES.values())
 
     def __init__(self, testbed_version):
         super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
@@ -114,6 +116,9 @@ class TestbedController(testbed_impl.TestbedController):
 
     def shutdown(self):
         for element in self._elements.values():
+            if isinstance(element, self.LOCAL_TYPES):
+                # graceful shutdown of locally-implemented objects
+                element.Cleanup()
             element = None
 
     def _simulator_run(self, condition):