mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-04-24 20:52:03 +05:00
Fix memory leak.
This commit is contained in:
parent
b2ea8b9868
commit
2e67fe0f7e
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user