]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
patchGeomMemoryLeaks.dat by Christian CAREMOLI.
authorjfa <jfa@opencascade.com>
Fri, 1 Feb 2008 11:45:08 +0000 (11:45 +0000)
committerjfa <jfa@opencascade.com>
Fri, 1 Feb 2008 11:45:08 +0000 (11:45 +0000)
src/GEOM/GEOM_Engine.cxx
src/GEOM/GEOM_Engine.hxx
src/GEOM_I/GEOM_Gen_i.cc
src/GEOM_I/GEOM_I3DPrimOperations_i.cc
src/GEOM_I/GEOM_IBooleanOperations_i.cc
src/GEOM_I/GEOM_IOperations_i.hh
src/GEOM_I/GEOM_Object_i.cc
src/GEOM_I/GEOM_Object_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh

index a02a558f39332f1f233b1307bf0bad896d953c2e..5bc00d051795d4b49d45d75a3f86787baf6da654 100644 (file)
@@ -117,6 +117,25 @@ GEOM_Engine::GEOM_Engine()
   //_lastObjectTag = 0;
 }
 
+/*!
+ *  Destructor
+ */
+GEOM_Engine::~GEOM_Engine()
+{ 
+  GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient It(_objects);
+  for(; It.More(); It.Next()) 
+    {
+      RemoveObject(Handle(GEOM_Object)::DownCast(It.Value()));
+    }
+
+  //Close all documents not closed
+  for(Interface_DataMapIteratorOfDataMapOfIntegerTransient anItr(_mapIDDocument); anItr.More(); anItr.Next())
+    Close(anItr.Key());
+
+  _mapIDDocument.Clear();
+  _objects.Clear();
+}
+
 //=============================================================================
 /*!
  *  GetDocument
index 52d418dd02faa7a98fea56d515800cfb0a748d2d..ab6b8282117288344670e1d9dfc0a58292c0fe2c 100644 (file)
@@ -36,7 +36,7 @@ class GEOM_Engine
 {
  public:
   Standard_EXPORT GEOM_Engine();
-  Standard_EXPORT ~GEOM_Engine() { _mapIDDocument.Clear(); _objects.Clear(); }
+  Standard_EXPORT virtual ~GEOM_Engine();
 
   //Retuns the engine    
   Standard_EXPORT static GEOM_Engine* GetEngine();   
index 0ba24697392e4faa08cb6a0e6133b4ffe8bc2705..106ee9ef66c6c80bba21633cf6ec80fbfe8231c5 100644 (file)
@@ -565,8 +565,8 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy(SALOMEDS::Study_ptr theStudy, GEOM:
 //============================================================================
 void GEOM_Gen_i::register_name(char * name)
 {
-  GEOM::GEOM_Gen_ptr g = GEOM::GEOM_Gen::_narrow(_this());
-  name_service->Register(g, CORBA::string_dup(name));
+  GEOM::GEOM_Gen_var g = _this();
+  name_service->Register(g, name);
 }
 
 //============================================================================
@@ -599,6 +599,7 @@ GEOM::GEOM_IBasicOperations_ptr GEOM_Gen_i::GetIBasicOperations(CORBA::Long theS
 
   GEOM::GEOM_Gen_ptr engine = _this();
 
+  //transfer reference on engine
   GEOM_IBasicOperations_i* aServant =
     new GEOM_IBasicOperations_i(_poa, engine, _impl->GetIBasicOperations(theStudyID));
 
@@ -928,7 +929,8 @@ GEOM_I_EXPORT
                                                const char * interfaceName)
   {
    GEOM_Gen_i * myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName);
-   myGEOM_Gen_i->register_name("/myGEOM_Gen"); // NRI : 11/07/2002 : Add for Supervision example
+   // Don't understand the reason of this register ????
+//   myGEOM_Gen_i->register_name("/myGEOM_Gen"); // NRI : 11/07/2002 : Add for Supervision example
    return myGEOM_Gen_i->getId();
   }
 }
index 276a9d556a1a5623b5c5defb2ca7142db494f2ee..207c997080acdfe45d84bd6841c57d651306cb89 100644 (file)
@@ -247,8 +247,9 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSpherePntR
   if (thePnt == NULL) return aGEOMObject._retn();
 
   //Get the reference point
+  CORBA::String_var entry=thePnt->GetEntry();
   Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject
-    (thePnt->GetStudyID(), thePnt->GetEntry());
+    (thePnt->GetStudyID(), entry);
 
   if (aPnt.IsNull()) return aGEOMObject._retn();
 
index 836451282d49f7b6cc464ca4701a8c1d02fe5fff..57dabf6a6ce2e2f85d84bd0a775adba439fc4f65 100644 (file)
@@ -72,10 +72,12 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeBoolean
   if (theShape1 == NULL || theShape2 == NULL) return aGEOMObject._retn();
 
   //Get the reference shapes
+  CORBA::String_var entry=theShape1->GetEntry();
   Handle(GEOM_Object) aSh1 = GetOperations()->GetEngine()->GetObject
-    (theShape1->GetStudyID(), theShape1->GetEntry());
+    (theShape1->GetStudyID(), entry);
+  entry=theShape2->GetEntry();
   Handle(GEOM_Object) aSh2 = GetOperations()->GetEngine()->GetObject
-    (theShape2->GetStudyID(), theShape2->GetEntry());
+    (theShape2->GetStudyID(), entry);
 
   if (aSh1.IsNull() || aSh2.IsNull()) return aGEOMObject._retn();
 
index 9ad5fca9a6b0fe71a0a1acefeafc43f7630caa0d..c425449dc8406c26a60d7679f446398ced3006a4 100644 (file)
@@ -59,7 +59,7 @@ class GEOM_I_EXPORT GEOM_IOperations_i : public virtual POA_GEOM::GEOM_IOperatio
  private:
  
   ::GEOM_IOperations* _impl;
-  GEOM::GEOM_Gen_ptr _engine;     
+  GEOM::GEOM_Gen_var _engine;     
 };
 
 #endif
index d8794d7b99738dc4bd57169c2973a09933d89fe4..4a86443b64649dd578f5123654e9a25b3bff4c23 100644 (file)
@@ -61,7 +61,9 @@ GEOM_Object_i::GEOM_Object_i (PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr
 //=============================================================================
 
 GEOM_Object_i::~GEOM_Object_i()
-{}
+{
+  GEOM_Engine::GetEngine()->RemoveObject(_impl);
+}
 
 
 //=============================================================================
index 43711eacd2c94c6ba8da3bc4ba57adf8e3a0838a..56631b7f0e7e8f1493cb124374b2584722c5358f 100644 (file)
@@ -85,7 +85,7 @@ class GEOM_I_EXPORT GEOM_Object_i : public virtual POA_GEOM::GEOM_Object, public
 
  private:
 
-  GEOM::GEOM_Gen_ptr _engine;
+  GEOM::GEOM_Gen_var _engine;
   Handle(GEOM_Object) _impl;
   TopoDS_Shape _geom;
 };
index 666ec08611870b4bc0b114ff8ac91c81daa2e4e7..ba79c1791c032c89613e98dff41a4a8d562774d3 100644 (file)
@@ -70,6 +70,12 @@ GEOM_Superv_i::GEOM_Superv_i(CORBA::ORB_ptr orb,
 GEOM_Superv_i::~GEOM_Superv_i()
 {
   MESSAGE("GEOM_Superv_i::~GEOM_Superv_i");
+  if (!CORBA::is_nil(myBasicOp))
+    myBasicOp->Destroy();
+  if (!CORBA::is_nil(myBoolOp))
+    myBoolOp->Destroy();
+  if (!CORBA::is_nil(my3DPrimOp))
+    my3DPrimOp->Destroy();
   delete name_service;
 }
 
@@ -79,8 +85,8 @@ GEOM_Superv_i::~GEOM_Superv_i()
 //============================================================================
 void GEOM_Superv_i::register_name(char * name)
 {
-  GEOM::GEOM_Superv_ptr g = GEOM::GEOM_Superv::_narrow(POA_GEOM::GEOM_Superv::_this());
-  name_service->Register(g, strdup(name)); 
+  GEOM::GEOM_Superv_var g = _this();
+  name_service->Register(g, name); 
 }
 
 //=============================================================================
@@ -88,9 +94,17 @@ void GEOM_Superv_i::register_name(char * name)
 //=============================================================================
 void GEOM_Superv_i::setGeomEngine()
 {
+  if ( !CORBA::is_nil(myGeomEngine) ) 
+    return;
   // get GEOM_Gen engine
+  /*
   SALOME_LifeCycleCORBA* lcc = new SALOME_LifeCycleCORBA( name_service );
   Engines::Component_var comp = lcc->FindOrLoad_Component( "FactoryServer", "GEOM" );
+  */
+
+  Engines::Container_var cont=GetContainerRef();
+  cont->load_component_Library("GEOM");
+  Engines::Component_var comp=cont->create_component_instance("GEOM",0);
 
   myGeomEngine = GEOM::GEOM_Gen::_narrow(comp);
 }
@@ -799,7 +813,9 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSphere  (CORBA::Double theX,
   MESSAGE("GEOM_Superv_i::MakeSphepe");
   getBasicOp();
   get3DPrimOp();
-  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeSpherePntR(myBasicOp->MakePointXYZ(theX, theY, theZ), theRadius);
+  GEOM::GEOM_Object_var o = myBasicOp->MakePointXYZ(theX, theY, theZ);
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeSpherePntR(o, theRadius);
+  o->Destroy();
   endService( " GEOM_Superv_i::MakeSphepe" );
   return anObj;
 }
@@ -2737,7 +2753,8 @@ extern "C"
                                                      const char * interfaceName)
   {
     GEOM_Superv_i * myGEOM_Superv_i = new GEOM_Superv_i(orb, poa, contId, instanceName, interfaceName);
-    myGEOM_Superv_i->register_name("/myGEOM_Superv");
+    //Don't understand the reason why this component is registered ???
+//    myGEOM_Superv_i->register_name("/myGEOM_Superv");
     return myGEOM_Superv_i->getId() ;
   }
 }
index 0d303970496751e0e5a07a2c15078bda6dd62567..18993469fa37d23878431c6dd28e4e29ba26e516 100644 (file)
@@ -566,21 +566,21 @@ public:
   
 private:
   SALOME_NamingService *  name_service; 
-  GEOM::GEOM_Gen_ptr      myGeomEngine;
+  GEOM::GEOM_Gen_var      myGeomEngine;
   CORBA::Long             myStudyID;
   CORBA::Long             myLastStudyID; // mkr : PAL10770
   PortableServer::POA_var myPOA;
   
-  GEOM::GEOM_IBasicOperations_ptr     myBasicOp;
-  GEOM::GEOM_I3DPrimOperations_ptr    my3DPrimOp;
-  GEOM::GEOM_IBooleanOperations_ptr   myBoolOp;
-  GEOM::GEOM_IInsertOperations_ptr    myInsOp;
-  GEOM::GEOM_ITransformOperations_ptr myTransfOp;
-  GEOM::GEOM_IShapesOperations_ptr    myShapesOp;
-  GEOM::GEOM_IBlocksOperations_ptr    myBlocksOp;
-  GEOM::GEOM_ICurvesOperations_ptr    myCurvesOp;
-  GEOM::GEOM_ILocalOperations_ptr     myLocalOp;
-  GEOM::GEOM_IGroupOperations_ptr     myGroupOp;
+  GEOM::GEOM_IBasicOperations_var     myBasicOp;
+  GEOM::GEOM_I3DPrimOperations_var    my3DPrimOp;
+  GEOM::GEOM_IBooleanOperations_var   myBoolOp;
+  GEOM::GEOM_IInsertOperations_var    myInsOp;
+  GEOM::GEOM_ITransformOperations_var myTransfOp;
+  GEOM::GEOM_IShapesOperations_var    myShapesOp;
+  GEOM::GEOM_IBlocksOperations_var    myBlocksOp;
+  GEOM::GEOM_ICurvesOperations_var    myCurvesOp;
+  GEOM::GEOM_ILocalOperations_var     myLocalOp;
+  GEOM::GEOM_IGroupOperations_var     myGroupOp;
 
 };