Fix memory leak.

This commit is contained in:
jfa 2009-09-15 05:33:34 +00:00
parent b2ea8b9868
commit 2e67fe0f7e

View File

@ -24,7 +24,7 @@
// Author : Yves FRICAUD/Lucien PIGNOLONI // Author : Yves FRICAUD/Lucien PIGNOLONI
// Module : GEOM // Module : GEOM
// $Header$ // $Header$
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
@ -58,36 +58,34 @@
#define HST_CLIENT_LEN 256 #define HST_CLIENT_LEN 256
//======================================================================= //=======================================================================
// function : Load() // function : Load()
// purpose : // purpose :
//======================================================================= //=======================================================================
TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape ) TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
{ {
std::string hst_client = Kernel_Utils::GetHostname(); std::string hst_client = Kernel_Utils::GetHostname();
Engines::Container_var ctn_server = geom->GetContainerRef(); Engines::Container_var ctn_server = geom->GetContainerRef();
long pid_server = ctn_server->getPID(); long pid_server = ctn_server->getPID();
if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) ) { if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) ) {
TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape()); TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape());
return(*S); return(*S);
} else { } else {
/* get sequence of bytes of resulting brep shape from GEOM server */ /* get sequence of bytes of resulting brep shape from GEOM server */
TopoDS_Shape S; TopoDS_Shape S;
SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream(); SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream();
int sizebuf = SeqFile->length(); int sizebuf = SeqFile->length();
char* buf; char* buf;
buf = (char*) &SeqFile[0]; buf = (char*) &SeqFile[0];
std::istrstream streamBrep(buf,sizebuf); std::istrstream streamBrep(buf,sizebuf);
BRep_Builder aBuilder; BRep_Builder aBuilder;
BRepTools::Read(S, streamBrep, aBuilder); BRepTools::Read(S, streamBrep, aBuilder);
return(S); return(S);
}; }
} }
//======================================================================= //=======================================================================
// function : Create() // function : Create()
// purpose : Create in client not in a container // purpose : Create in client not in a container
@ -158,18 +156,17 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape&
void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR) void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
{ {
if( myIORs.IsEmpty() ) if( myIORs.IsEmpty() )
return ; return;
TopoDS_Shape S ; TopoDS_Shape S;
Standard_Integer anIndex = Find( IOR, S ) ; Standard_Integer anIndex = Find( IOR, S );
if( anIndex != 0 ) { if( anIndex != 0 ) {
myIORs.Remove(anIndex) ; myIORs.Remove(anIndex);
myShapes.Remove(anIndex) ; myShapes.Remove(anIndex);
} }
return ; return;
} }
//======================================================================= //=======================================================================
// function : ClearClientBuffer() // function : ClearClientBuffer()
// purpose : purge buffer // purpose : purge buffer
@ -177,10 +174,10 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
void GEOM_Client::ClearClientBuffer() void GEOM_Client::ClearClientBuffer()
{ {
if( myIORs.IsEmpty() ) if( myIORs.IsEmpty() )
return ; return;
myIORs.Clear() ; myIORs.Clear();
myShapes.Clear() ; myShapes.Clear();
return ; return;
} }
//======================================================================= //=======================================================================
@ -189,10 +186,9 @@ void GEOM_Client::ClearClientBuffer()
//======================================================================= //=======================================================================
unsigned int GEOM_Client::BufferLength() unsigned int GEOM_Client::BufferLength()
{ {
return myIORs.Length() ; return myIORs.Length();
} }
//======================================================================= //=======================================================================
// function : GetShape() // function : GetShape()
// purpose : // purpose :
@ -200,7 +196,8 @@ unsigned int GEOM_Client::BufferLength()
TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape ) TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
{ {
TopoDS_Shape S; 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); Standard_Integer anIndex = Find(IOR, S);
if (anIndex != 0) return S; if (anIndex != 0) return S;