From 2e67fe0f7ed6ba18491776ff4724a89828a6954b Mon Sep 17 00:00:00 2001 From: jfa Date: Tue, 15 Sep 2009 05:33:34 +0000 Subject: [PATCH] Fix memory leak. --- src/GEOMClient/GEOM_Client.cxx | 85 ++++++++++++++++------------------ 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/src/GEOMClient/GEOM_Client.cxx b/src/GEOMClient/GEOM_Client.cxx index 88bd374a3..f892de7f0 100644 --- a/src/GEOMClient/GEOM_Client.cxx +++ b/src/GEOMClient/GEOM_Client.cxx @@ -24,7 +24,7 @@ // Author : Yves FRICAUD/Lucien PIGNOLONI // Module : GEOM // $Header$ -// + #include #include @@ -58,43 +58,41 @@ #define HST_CLIENT_LEN 256 - //======================================================================= // function : Load() -// purpose : +// purpose : //======================================================================= TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape ) { - std::string hst_client = Kernel_Utils::GetHostname(); - - Engines::Container_var ctn_server = geom->GetContainerRef(); - long pid_server = ctn_server->getPID(); - - if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) ) { - TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape()); - return(*S); - } else { - /* get sequence of bytes of resulting brep shape from GEOM server */ - TopoDS_Shape S; - SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream(); - int sizebuf = SeqFile->length(); - char* buf; - buf = (char*) &SeqFile[0]; - std::istrstream streamBrep(buf,sizebuf); - BRep_Builder aBuilder; - BRepTools::Read(S, streamBrep, aBuilder); - return(S); - }; + std::string hst_client = Kernel_Utils::GetHostname(); + + Engines::Container_var ctn_server = geom->GetContainerRef(); + long pid_server = ctn_server->getPID(); + + if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) ) { + TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape()); + return(*S); + } else { + /* get sequence of bytes of resulting brep shape from GEOM server */ + TopoDS_Shape S; + SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream(); + int sizebuf = SeqFile->length(); + char* buf; + buf = (char*) &SeqFile[0]; + std::istrstream streamBrep(buf,sizebuf); + BRep_Builder aBuilder; + BRepTools::Read(S, streamBrep, aBuilder); + return(S); + } } - //======================================================================= // function : Create() // purpose : Create in client not in a container //======================================================================= GEOM_Client::GEOM_Client() { - pid_client = + pid_client = #ifdef WNT (long)_getpid(); #else @@ -104,7 +102,7 @@ GEOM_Client::GEOM_Client() //======================================================================= // function : Create() -// purpose : +// purpose : //======================================================================= GEOM_Client::GEOM_Client(Engines::Container_ptr client) { @@ -113,7 +111,7 @@ GEOM_Client::GEOM_Client(Engines::Container_ptr client) //======================================================================= // function : Find() -// purpose : +// purpose : //======================================================================= Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) { @@ -128,7 +126,7 @@ Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_S //======================================================================= // function : Find() -// purpose : +// purpose : //======================================================================= Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) { @@ -158,18 +156,17 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR) { if( myIORs.IsEmpty() ) - return ; - - TopoDS_Shape S ; - Standard_Integer anIndex = Find( IOR, S ) ; + return; + + TopoDS_Shape S; + Standard_Integer anIndex = Find( IOR, S ); if( anIndex != 0 ) { - myIORs.Remove(anIndex) ; - myShapes.Remove(anIndex) ; + myIORs.Remove(anIndex); + myShapes.Remove(anIndex); } - return ; + return; } - //======================================================================= // function : ClearClientBuffer() // purpose : purge buffer @@ -177,10 +174,10 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR) void GEOM_Client::ClearClientBuffer() { if( myIORs.IsEmpty() ) - return ; - myIORs.Clear() ; - myShapes.Clear() ; - return ; + return; + myIORs.Clear(); + myShapes.Clear(); + return; } //======================================================================= @@ -189,18 +186,18 @@ void GEOM_Client::ClearClientBuffer() //======================================================================= unsigned int GEOM_Client::BufferLength() { - return myIORs.Length() ; + return myIORs.Length(); } - //======================================================================= // function : GetShape() -// purpose : +// purpose : //======================================================================= TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape ) { TopoDS_Shape S; - TCollection_AsciiString IOR = geom->GetStringFromIOR(aShape); + CORBA::String_var anIOR = geom->GetStringFromIOR(aShape); + TCollection_AsciiString IOR = (char*)anIOR.in(); Standard_Integer anIndex = Find(IOR, S); if (anIndex != 0) return S; -- 2.39.2