Xcos MVC: fix memleak in list insertion 48/17348/2
Paul Bignier [Tue, 20 Oct 2015 09:10:50 +0000 (11:10 +0200)]
A List inserted in another List is cloned, so free it after it is appended

Change-Id: Ie04a37c3e1c9007ca87b040b9c50aade9e984510

scilab/modules/scicos/src/cpp/view_scilab/BaseAdapter.hxx
scilab/modules/scicos/src/cpp/view_scilab/ModelAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ParamsAdapter.cpp
scilab/modules/scicos/tests/unit_tests/model/prop_wrong.dia.ref
scilab/modules/scicos/tests/unit_tests/model/prop_wrong.tst

index 07ed246..ef8d65e 100644 (file)
@@ -183,7 +183,12 @@ public:
         // set the tlist field value
         for (typename property<Adaptor>::props_t_it it = properties.begin(); it != properties.end(); ++it)
         {
-            tlist->append(it->get(*static_cast<Adaptor*>(this), controller));
+            types::InternalType* field = it->get(*static_cast<Adaptor*>(this), controller);
+            tlist->append(field);
+            if (field->isList())
+            {
+                field->killMe();
+            }
         }
 
         return tlist;
index 8786f10..285ca9d 100644 (file)
@@ -1528,6 +1528,7 @@ struct equations
             parametersValues->set(i, parametersValue);
         }
         parametersField->set(1, parametersValues);
+        parametersValues->killMe();
 
         // 'parameters' states (optional, only check its presence if at least one parameter is present)
         if (parametersSize != 0)
@@ -1548,6 +1549,7 @@ struct equations
         }
 
         o->set(4, parametersField);
+        parametersField->killMe();
 
         return o;
     }
index 41da87d..463d336 100644 (file)
@@ -331,6 +331,7 @@ struct options
         types::Double* ThreeD2 = new types::Double(33);
         ThreeDField->append(ThreeD2);
         Scsopt->append(ThreeDField);
+        ThreeDField->killMe();
 
         types::Double* BackgroundField = new types::Double(1, 2);
         BackgroundField->set(0, 8);
@@ -356,6 +357,7 @@ struct options
         ID2->set(3, 1);
         IDField->append(ID2);
         Scsopt->append(IDField);
+        IDField->killMe();
 
         types::Double* CmapField = new types::Double(1, 3);
         CmapField->set(0, 0.8);
index 763ad96..fadba96 100644 (file)
@@ -5,7 +5,7 @@
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 //
-// <-- XCOS TEST -->
+// <-- CLI SHELL MODE -->
 scicos_log("TRACE");
 b = scicos_block();
 Xcos debug: objectCreated( 1 , BLOCK )
index 71f934e..1828113 100644 (file)
@@ -5,7 +5,7 @@
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 //
-// <-- XCOS TEST -->
+// <-- CLI SHELL MODE -->
 
 scicos_log("TRACE");