2 Replies Last post: Jun 18, 2008 9:02 PM by Guest  
Guest

Jun 18, 2008 8:50 PM

[OpenSIPStack] FW: Memory Leak in Proxy and Full Mode

Guest
1. Jun 18, 2008 8:50 PM in response to: Guest
Re: [OpenSIPStack] FW: Memory Leak in Proxy and Full Mode
Right! I've found m_MinSE is not getting deleted in
SIPMessage::CleanUp(). Patched this in CVS.

Joegen

Gustavo Curetti wrote:
Hi Joegen

The modification doesn't solve the memory issues. I continue searching
for the memory leak.

A new case is attached and this one appear too when debugging with
Microsot Visual.

Originally, i sent the attached Invite every 250 ms and I set the
timer B and H in 20 ms:

#define SIP_TIMER_B 20

#define SIP_TIMER_H 20

Then I change the code
of B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
for making easier to replicate the leak:

void B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
{
while( !m_UpperRegSync.Wait( 250 ) )
{
OString testRequest =
"INVITE sip:5435155555@192.168.0.5:5060 SIP/2.0\r\nContact:
\r\nCSeq: 101 INVITE\r\nFrom:
;tag=5A3745C-2418\r\nTo:
\r\nVia: SIP/2.0/UDP
192.168.0.206:5060;branch=z9hG4bK63028de3a6b7743a\r\nVia: SIP/2.0/UDP
192.168.0.10:5060\r\nRecord-Route:
\r\nAllow: INVITE, OPTIONS, BYE, CANCEL,
ACK, PRACK, COMET, REFER, SUBSCRIBE, NOTIFY, INFO\r\nUser-Agent:
Cisco-SIPGateway/IOS-12.x\r\nCall-Id:
3738EB25-278011DD-B92F90A6-C0EF6BE3@192.168.0.10\r\nMax-Forwards
:
6\r\nExpires: 180\r\nContent-Length: 235\r\ndate: Thu, 22 May 2008
21:52:32 GMT\r\nsupported: timer\r\nmin-se: 1800\r\ncisco-guid:
926237238-662704605-3106705574-3236916195\r\nremote-party-id:
;party=calling;screen=no;privacy=off\r\ntimestamp:
1211493152\r\nallow-events: telephone-event\r\ncontent-type:
application/sdp\r\n\r\nv=0\r\no=CiscoSystemsSIP-GW-UserAgent 7402 717
IN IP4 192.168.0.10\r\ns=SIP Call\r\nc=IN IP4 192.168.0.10\r\nt=0
0\r\nm=audio 19298 RTP/AVP 0 19\r\nc=IN IP4 192.168.0.10\r\na=rtpmap:0
PCMU/8000\r\na=rtpmap:19 CN/8000\r\na=ptime:20";
testRequest = ParserTools::LineFeedSanityCheck( testRequest );
SIPMessage * msg = new SIPMessage( testRequest );

OString addrStr = "192.168.0.147";
OString portStr = "10000";
SIPHeader rcvAddr( "RCVADDR", addrStr );
SIPHeader rcvPort( "RCVPORT", portStr );
SIPHeader rcvTran( "RCVTRAN", "udp" );

msg->AddInternalHeader( rcvAddr );
msg->AddInternalHeader( rcvPort );
msg->AddInternalHeader( rcvTran );
msg->SetInterfaceAddress( "192.168.0.202" );
msg->SetInterfacePort( 5070 );

OStringStream traceStream;

traceStream << "<<< "
GetStartLine() << " "
<< " SRC: " << addrStr << ":" << portStr << ":UDP"
<< " enc=" IsEncrypted()
<< " bytes=1103";

OStringStream strPacket;
strPacket COMPOUND_LOG_CONTEXT( LogInfo(), msg->GetCallId(),
traceStream.str(), LogDebugHigh(), strPacket );

SIPTransport::NotifyRead( traceStream.str() );

if( msg->IsInvite() )
{
SIPMessage * trying = new SIPMessage();
msg->CreateResponse( *trying, SIPMessage::Code100_Trying );
Via via;
msg->GetViaAt(0, via );
if( via.IsBehindNAT() )
{
SIPURI srcURI;
srcURI.SetHost(addrStr);
srcURI.SetPort(portStr);
trying->SetSendAddress(srcURI);
}
if( msg->IsEncrypted() )
trying->SetEncryption( TRUE );
GetTransportManager()->ProcessOutbound( trying );
}

GetTransportManager()->OnTransportEvent(
new SIPTransportEvent(
msg,
SIPTransportEvent::UDPPacketArrival
) );

/*///process the keep alives here
for( PINDEX i = 0; i {
SIPMessage reg;
if( GetRegistrationDB().GetRegistration( i, reg ) )
{
if( reg.HasInternalHeader( "upper-reg" ) )
{
/// this is an upper reg, send a keep-alive
/// Check the last via if its from a private IP
Via via;
if( reg.GetViaAt( reg.GetViaSize() - 1, via ) )
{
if( via.IsBehindNAT() )
{
SIPURI target;
target.SetHost( via.GetReceiveAddress().AsSTLString() );
target.SetPort( via.GetRPort() );
SIPMessage keepAlive;
RequestLine requestLine;
requestLine.SetMethod( "KEEP-ALIVE" );
requestLine.SetRequestURI( target );
keepAlive.SetStartLine( requestLine );
GetUserAgent().TransportWrite( keepAlive );
}
}
}
}
}*/
}
}

The OpenSBC is in "Proxy Only Mode" and the configuration is in
"OpenSBC.reg" (attached).

I compile the OpenSBC in Microsoft Visual C++ 2005 obtaining the exe
attached.

Any idea?

Thanks for your help.

Gustavo



Date: Thu, 5 Jun 2008 14:18:35 +0800
To: curetti.gustavo@gmail.com
Subject: Re: OpenSIPStack FW: Memory Leak in Proxy and Full Mode
From: joegen.baclor@gmail.com

Hi Gustavo,

Yes, i'm able to replicate it. For some reason, the code I #ifdefed in
AppendVia() below is causing it. Let me know if it solves your issues.
I've tried looking at what its doing but nothing is evident as to
why it
would leak. If you find something, let me know

Joegen

BOOL SIPMessage::AppendVia(
const Via & header
)
{
GlobalLock();

ParseViaList();

if( m_ViaList == NULL )
{
m_ViaList = new Via::Collection();
m_ViaList->Append( new Via( header ) );
}else
{

#if 0 // For some reason, this sanity check is leaking mem
/// sanity check
if( m_ViaList->GetSize() > 0 )
{
Via & topVia = (*m_ViaList)[0];

SIPURI topViaURI = topVia.GetURI();

SIPURI newURI = header.GetURI();

if( SIPTransport::IsTheSameAddress( topViaURI, newURI, TRUE ) )
return FALSE;
}
#endif

///we append it on top
Via::Collection oldViaList = *m_ViaList;
oldViaList.MakeUnique();
delete m_ViaList;

m_ViaList = new Via::Collection();
m_ViaList->Append( new Via( header ) );

for( PINDEX i = 0; i > m_ViaList->Append( new Via( oldViaList ) );

m_ViaList->MakeUnique();
}

return TRUE;
}

Gustavo Curetti wrote:


Hi Joegen

The destructor is called. The problem seem to be the headers like
Via,
RecordRoute, Contact, Allow, Supported (List headers).

The leak is very easy to reproduce. I change the code of
B2BUserAgent::Registrar::ProcessUpperRegKeepAlive:

void B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
{
while( !m_UpperRegSync.Wait( 10 ) )
{

SIPMessage * msg = new SIPMessage();

msg->AppendVia(Via("SIP/2.0/UDP 192.168.0.10:5060"));
msg->AppendVia(Via("SIP/2.0/UDP

192.168.0.206:5060;branch=z9hG4bK440fdc3e04de9d10;rport=5060;received=192.168.0.206"));
msg->AppendRecordRoute(RouteURI(""));
msg->AppendContact(ContactURI(""));
msg->AppendAllow(Allow("INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY"));
msg->AppendSupported(Supported("replaces"));

delete msg;
}
}

I compile the OpenSBC in Microsoft Visual C++ 2005 obtaining the exe
attached.
I execute "OpenSBC Debug" in Windows 2003 or Windows 2000 and the

leak
is there.

I put traces and SIPMessage::~SIPMessage(), SIPMessage::Cleanup() are
called.

Any idea?

Thanks for your help.

Gustavo



Date: Mon, 2 Jun 2008 10:19:08 +0800
To: curetti.gustavo@gmail.com;
opensipstack-devel@lists.sourceforge.net
From: joegen.baclor@gmail.com
Subject: Re: OpenSIPStack FW: Memory Leak in Proxy and Full Mode

Try putting a trace before and after the "delete" statement to
be sure
that its getting called. From what i see, assuming that SIPMessage
destructor performs proper cleanup, that a leak here can only be
caused
by an exception occurring in the SIPMessage constructor;

Gustavo Curetti wrote:
Hi Joegen:

The memory leak is hard to find. I send the 200 OK repeatedly but
the memory leak doesn't appear if i'm debugging with Microsot Visual
2005, but the leak appears if i'm running the OpenSBC like a service.

If I comment:

void SIPStack::EnqueueTransportWriteEvent(
const SIPMessage & message,
SIPTransportEvent::Type eventType
)
{
if( m_IsTerminating )
return;

/*SIPMessage * msg = new SIPMessage(message);

msg->SetInternalHeader( "TRN-ID",

msg->GetTransactionId().AsString());
m_TransportManager->EnqueueEvent( new SIPTransportEvent( msg,
eventType ) );*/
}

there is not leak. But if I modify the code like this:

void SIPStack::EnqueueTransportWriteEvent(


const SIPMessage & message,
SIPTransportEvent::Type eventType
)
{
if( m_IsTerminating )
return;

SIPMessage * msg = new SIPMessage(message);

/*msg->SetInternalHeader( "TRN-ID",
msg->GetTransactionId().AsString());
m_TransportManager->EnqueueEvent( new SIPTransportEvent( msg,
eventType ) );*/
delete msg;
}

the leak shows up. I don't understand why this happens if I'm
deleting the msg.
What i said in the last mail about CSeq is not seem to be the
reason.
Any idea? Thanks for your help.
Gustavo

From: curetti_gustavo@hotmail.comSubject: RE: OpenSIPStack

Memory Leak in Proxy and Full ModeDate: Fri, 30 May 2008 17:04:37
+0200


Hi Joegen: I found that the memory leak is when you create a
SIPMessage from other SIPMessage or from a OString and then you
delete
de message. In the case of the 200 Ok the message is created in:
ProxySessionManager::OnOrphanedMessage()SIPUserAgent::TransportWrite()SIPStack::EnqueueTransportWriteEvent(){SIPMessage

* msg = new SIPMessage(message); The memory leak is because the CSeq
header. If i comment : SIPMessage::SIPMessage(const SIPMessage &
msg)SIPMessage & SIPMessage::operator=(const SIPMessage & msg)void
SIPMessage::AssignContents(SIPMessage & msg){ /*if( m_CSeq != NULL )
msg.m_CSeq = static_cast(m_CSeq->Clone());*/} There is no more
memory leak. I try to replace: SIPMessage * msg = new
SIPMessage(message); ----> SIPMessage * msg = new
SIPMessage(message.AsString()); but the memory leak still exist
unless
i comment: void SIPMessage::Finalize(){ /*if( m_CSeq == NULL ) {
m_CSeq = new CSeq( h ); }*/} That's what i found so far. Gustavo


Date: Fri, 30 May 2008 11:26:11 +0800> To:
curetti.gustavo@gmail.com; opensipstack-devel@lists.sourceforge.net>
Subject: Re: OpenSIPStack Memory Leak in Proxy and Full Mode> From:
joegen.baclor@gmail.com> > Hi Gustavo,> > Take a look at void
ProxySession::OnFinalResponse( SIPMessage & message > ) method. Can
you verify if the object created in:> > manager.CreateTuple(
m_OriginalInvite, m_RoutedInvite, 10 );> > Actually expires after 10
seconds?> > Putting a breakpoint at
ProxySessionTupleManager::Tuple::~Tuple() should > be enough to
confirm it.> > Also by any chance, did you accidentally think that
this tuple is the > mem leak because it was created after the
transaction?> > Joegen> > > Gustavo Curetti wrote:> > Hi Joegen> >

I found a memory leak when the OpenSBC is configured in Proxy or Full
mode. When i send a 200 Ok for example in B2B mode there is no memory
leak, but when i send a 200 ok in Proxy or Full mode, some memory is
taken and never released. I attach the logs. The OpenSBC
(192.168.0.202:5070) is running under Windows.> > > > Thanks for your
help> > > > Gustavo> >
_________________________________________________________________> >
Ingresá ya a MSN Deportes y enterate de las últimas novedades del
mundo deportivo.> > http://msn.foxsports.com/fslasc/> >
------------------------------------------------------------------------>
------------------------------------------------------------------------->

This SF.net email is sponsored by: Microsoft> > Defy all
challenges.
Microsoft(R) Visual Studio 2008.> >
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/> >
------------------------------------------------------------------------>
_______________________________________________> >
opensipstack-devel mailing list> >
opensipstack-devel@lists.sourceforge.net> >
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel> >

------------------------------------------------------------------------>
No virus found in this incoming message.> > Checked by AVG. > >
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date:
5/23/2008 3:36 PM> > > >

Ingresá ya a MSN en Concierto y disfrutá los recitales en vivo de
tus artistas favoritos. MSN en Concierto
_________________________________________________________________
Descargá ya gratis y viví la experiencia Windows Live.
http://www.descubrewindowslive.com/latam/index.html

This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel




This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel


Descargá ya gratis y viví la experiencia Windows Live. Descubre
Windows Live <http://www.descubrewindowslive.com/latam/index.html>


Internal Virus Database is out-of-date.
Checked by AVG.
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date:
5/23/2008 3:36 PM


Ingresá ya a MSN Deportes y enterate de las últimas novedades del
mundo deportivo. MSN Deportes <http://msn.foxsports.com/fslasc/>


Internal Virus Database is out-of-date.
Checked by AVG.
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date: 5/23/2008 3:36 PM



Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel
Guest
2. Jun 18, 2008 9:02 PM in response to: Guest
Re: [OpenSIPStack] FW: Memory Leak in Proxy and Full Mode
Hi Gustavo,

I've been tracking this issue in assembla. Feel free to create an
account in the tracker so you could comment on the status of the leak.

http://www.assembla.com/spaces/opensbc/tickets/22

Joegen

Joegen E. Baclor wrote:
Right! I've found m_MinSE is not getting deleted in
SIPMessage::CleanUp(). Patched this in CVS.

Joegen

Gustavo Curetti wrote:

Hi Joegen

The modification doesn't solve the memory issues. I continue searching
for the memory leak.

A new case is attached and this one appear too when debugging with
Microsot Visual.

Originally, i sent the attached Invite every 250 ms and I set the
timer B and H in 20 ms:

#define SIP_TIMER_B 20

#define SIP_TIMER_H 20

Then I change the code
of B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
for making easier to replicate the leak:

void B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
{
while( !m_UpperRegSync.Wait( 250 ) )
{
OString testRequest =
"INVITE sip:5435155555@192.168.0.5:5060 SIP/2.0\r\nContact:
\r\nCSeq: 101 INVITE\r\nFrom:
;tag=5A3745C-2418\r\nTo:
\r\nVia: SIP/2.0/UDP
192.168.0.206:5060;branch=z9hG4bK63028de3a6b7743a\r\nVia: SIP/2.0/UDP
192.168.0.10:5060\r\nRecord-Route:
\r\nAllow: INVITE, OPTIONS, BYE, CANCEL,
ACK, PRACK, COMET, REFER, SUBSCRIBE, NOTIFY, INFO\r\nUser-Agent:
Cisco-SIPGateway/IOS-12.x\r\nCall-Id:
3738EB25-278011DD-B92F90A6-C0EF6BE3@192.168.0.10\r\nMax-Forwards
:
6\r\nExpires: 180\r\nContent-Length: 235\r\ndate: Thu, 22 May 2008
21:52:32 GMT\r\nsupported: timer\r\nmin-se: 1800\r\ncisco-guid:
926237238-662704605-3106705574-3236916195\r\nremote-party-id:
;party=calling;screen=no;privacy=off\r\ntimestamp:
1211493152\r\nallow-events: telephone-event\r\ncontent-type:
application/sdp\r\n\r\nv=0\r\no=CiscoSystemsSIP-GW-UserAgent 7402 717
IN IP4 192.168.0.10\r\ns=SIP Call\r\nc=IN IP4 192.168.0.10\r\nt=0
0\r\nm=audio 19298 RTP/AVP 0 19\r\nc=IN IP4 192.168.0.10\r\na=rtpmap:0
PCMU/8000\r\na=rtpmap:19 CN/8000\r\na=ptime:20";
testRequest = ParserTools::LineFeedSanityCheck( testRequest );
SIPMessage * msg = new SIPMessage( testRequest );

OString addrStr = "192.168.0.147";
OString portStr = "10000";
SIPHeader rcvAddr( "RCVADDR", addrStr );
SIPHeader rcvPort( "RCVPORT", portStr );
SIPHeader rcvTran( "RCVTRAN", "udp" );

msg->AddInternalHeader( rcvAddr );
msg->AddInternalHeader( rcvPort );
msg->AddInternalHeader( rcvTran );
msg->SetInterfaceAddress( "192.168.0.202" );
msg->SetInterfacePort( 5070 );

OStringStream traceStream;

traceStream << "<<< "
GetStartLine() << " "
<< " SRC: " << addrStr << ":" << portStr << ":UDP"
<< " enc=" IsEncrypted()
<< " bytes=1103";

OStringStream strPacket;
strPacket > COMPOUND_LOG_CONTEXT( LogInfo(), msg->GetCallId(),
traceStream.str(), LogDebugHigh(), strPacket );

SIPTransport::NotifyRead( traceStream.str() );

if( msg->IsInvite() )
{
SIPMessage * trying = new SIPMessage();
msg->CreateResponse( *trying, SIPMessage::Code100_Trying );
Via via;
msg->GetViaAt(0, via );
if( via.IsBehindNAT() )
{
SIPURI srcURI;
srcURI.SetHost(addrStr);
srcURI.SetPort(portStr);
trying->SetSendAddress(srcURI);
}
if( msg->IsEncrypted() )
trying->SetEncryption( TRUE );
GetTransportManager()->ProcessOutbound( trying );
}

GetTransportManager()->OnTransportEvent(
new SIPTransportEvent(
msg,
SIPTransportEvent::UDPPacketArrival
) );

/*///process the keep alives here
for( PINDEX i = 0; i > {
SIPMessage reg;
if( GetRegistrationDB().GetRegistration( i, reg ) )
{
if( reg.HasInternalHeader( "upper-reg" ) )
{
/// this is an upper reg, send a keep-alive
/// Check the last via if its from a private IP
Via via;
if( reg.GetViaAt( reg.GetViaSize() - 1, via ) )
{
if( via.IsBehindNAT() )
{
SIPURI target;
target.SetHost( via.GetReceiveAddress().AsSTLString() );
target.SetPort( via.GetRPort() );
SIPMessage keepAlive;
RequestLine requestLine;
requestLine.SetMethod( "KEEP-ALIVE" );
requestLine.SetRequestURI( target );
keepAlive.SetStartLine( requestLine );
GetUserAgent().TransportWrite( keepAlive );
}
}
}
}
}*/
}
}

The OpenSBC is in "Proxy Only Mode" and the configuration is in
"OpenSBC.reg" (attached).

I compile the OpenSBC in Microsoft Visual C++ 2005 obtaining the exe
attached.

Any idea?

Thanks for your help.

Gustavo


Date: Thu, 5 Jun 2008 14:18:35 +0800
To: curetti.gustavo@gmail.com
Subject: Re: OpenSIPStack FW: Memory Leak in Proxy and Full Mode
From: joegen.baclor@gmail.com

Hi Gustavo,

Yes, i'm able to replicate it. For some reason, the code I #ifdefed in
AppendVia() below is causing it. Let me know if it solves your issues.
I've tried looking at what its doing but nothing is evident as to
why it

would leak. If you find something, let me know

Joegen

BOOL SIPMessage::AppendVia(
const Via & header
)
{
GlobalLock();

ParseViaList();

if( m_ViaList == NULL )
{
m_ViaList = new Via::Collection();
m_ViaList->Append( new Via( header ) );
}else
{

#if 0 // For some reason, this sanity check is leaking mem
/// sanity check
if( m_ViaList->GetSize() > 0 )
{
Via & topVia = (*m_ViaList)[0];

SIPURI topViaURI = topVia.GetURI();

SIPURI newURI = header.GetURI();

if( SIPTransport::IsTheSameAddress( topViaURI, newURI, TRUE ) )
return FALSE;
}
#endif

///we append it on top
Via::Collection oldViaList = *m_ViaList;
oldViaList.MakeUnique();
delete m_ViaList;

m_ViaList = new Via::Collection();
m_ViaList->Append( new Via( header ) );

for( PINDEX i = 0; i >> m_ViaList->Append( new Via( oldViaList ) );

m_ViaList->MakeUnique();
}

return TRUE;
}

Gustavo Curetti wrote:

Hi Joegen

The destructor is called. The problem seem to be the headers like
Via,

RecordRoute, Contact, Allow, Supported (List headers).

The leak is very easy to reproduce. I change the code of
B2BUserAgent::Registrar::ProcessUpperRegKeepAlive:

void B2BUserAgent::Registrar::ProcessUpperRegKeepAlive()
{
while( !m_UpperRegSync.Wait( 10 ) )
{

SIPMessage * msg = new SIPMessage();

msg->AppendVia(Via("SIP/2.0/UDP 192.168.0.10:5060"));
msg->AppendVia(Via("SIP/2.0/UDP

192.168.0.206:5060;branch=z9hG4bK440fdc3e04de9d10;rport=5060;received=192.168.0.206"));

msg->AppendRecordRoute(RouteURI(""));
msg->AppendContact(ContactURI(""));
msg->AppendAllow(Allow("INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY"));
msg->AppendSupported(Supported("replaces"));

delete msg;
}
}

I compile the OpenSBC in Microsoft Visual C++ 2005 obtaining the exe
attached.
I execute "OpenSBC Debug" in Windows 2003 or Windows 2000 and the

leak

is there.

I put traces and SIPMessage::~SIPMessage(), SIPMessage::Cleanup() are
called.

Any idea?

Thanks for your help.

Gustavo



Date: Mon, 2 Jun 2008 10:19:08 +0800
To: curetti.gustavo@gmail.com;
opensipstack-devel@lists.sourceforge.net

From: joegen.baclor@gmail.com
Subject: Re: OpenSIPStack FW: Memory Leak in Proxy and Full Mode

Try putting a trace before and after the "delete" statement to
be sure

that its getting called. From what i see, assuming that SIPMessage
destructor performs proper cleanup, that a leak here can only be
caused

by an exception occurring in the SIPMessage constructor;

Gustavo Curetti wrote:

Hi Joegen:

The memory leak is hard to find. I send the 200 OK repeatedly but
the memory leak doesn't appear if i'm debugging with Microsot Visual
2005, but the leak appears if i'm running the OpenSBC like a service.

If I comment:

void SIPStack::EnqueueTransportWriteEvent(
const SIPMessage & message,
SIPTransportEvent::Type eventType
)
{
if( m_IsTerminating )
return;

/*SIPMessage * msg = new SIPMessage(message);

msg->SetInternalHeader( "TRN-ID",

msg->GetTransactionId().AsString());

m_TransportManager->EnqueueEvent( new SIPTransportEvent( msg,
eventType ) );*/

}

there is not leak. But if I modify the code like this:

void SIPStack::EnqueueTransportWriteEvent(

const SIPMessage & message,
SIPTransportEvent::Type eventType
)
{
if( m_IsTerminating )
return;

SIPMessage * msg = new SIPMessage(message);

/*msg->SetInternalHeader( "TRN-ID",

msg->GetTransactionId().AsString());

m_TransportManager->EnqueueEvent( new SIPTransportEvent( msg,
eventType ) );*/

delete msg;
}

the leak shows up. I don't understand why this happens if I'm
deleting the msg.

What i said in the last mail about CSeq is not seem to be the
reason.

Any idea? Thanks for your help.
Gustavo

From: curetti_gustavo@hotmail.comSubject: RE: OpenSIPStack

Memory Leak in Proxy and Full ModeDate: Fri, 30 May 2008 17:04:37
+0200

Hi Joegen: I found that the memory leak is when you create a
SIPMessage from other SIPMessage or from a OString and then you
delete

de message. In the case of the 200 Ok the message is created in:

ProxySessionManager::OnOrphanedMessage()SIPUserAgent::TransportWrite()SIPStack::EnqueueTransportWriteEvent(){SIPMessage

* msg = new SIPMessage(message); The memory leak is because the CSeq
header. If i comment : SIPMessage::SIPMessage(const SIPMessage &
msg)SIPMessage & SIPMessage::operator=(const SIPMessage & msg)void
SIPMessage::AssignContents(SIPMessage & msg){ /*if( m_CSeq != NULL )
msg.m_CSeq = static_cast(m_CSeq->Clone());*/} There is no more
memory leak. I try to replace: SIPMessage * msg = new
SIPMessage(message); ----> SIPMessage * msg = new
SIPMessage(message.AsString()); but the memory leak still exist
unless

i comment: void SIPMessage::Finalize(){ /*if( m_CSeq == NULL ) {
m_CSeq = new CSeq( h ); }*/} That's what i found so far. Gustavo


Date: Fri, 30 May 2008 11:26:11 +0800> To:
curetti.gustavo@gmail.com; opensipstack-devel@lists.sourceforge.net>
Subject: Re: OpenSIPStack Memory Leak in Proxy and Full Mode> From:
joegen.baclor@gmail.com> > Hi Gustavo,> > Take a look at void
ProxySession::OnFinalResponse( SIPMessage & message > ) method. Can
you verify if the object created in:> > manager.CreateTuple(
m_OriginalInvite, m_RoutedInvite, 10 );> > Actually expires after 10
seconds?> > Putting a breakpoint at
ProxySessionTupleManager::Tuple::~Tuple() should > be enough to
confirm it.> > Also by any chance, did you accidentally think that
this tuple is the > mem leak because it was created after the
transaction?> > Joegen> > > Gustavo Curetti wrote:> > Hi Joegen> >

I found a memory leak when the OpenSBC is configured in Proxy or Full
mode. When i send a 200 Ok for example in B2B mode there is no memory
leak, but when i send a 200 ok in Proxy or Full mode, some memory is
taken and never released. I attach the logs. The OpenSBC
(192.168.0.202:5070) is running under Windows.> > > > Thanks for your
help> > > > Gustavo> >
_________________________________________________________________> >
Ingresá ya a MSN Deportes y enterate de las últimas novedades del
mundo deportivo.> > http://msn.foxsports.com/fslasc/> >

------------------------------------------------------------------------>

------------------------------------------------------------------------->

This SF.net email is sponsored by: Microsoft> > Defy all
challenges.

Microsoft(R) Visual Studio 2008.> >
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/> >

------------------------------------------------------------------------>

_______________________________________________> >
opensipstack-devel mailing list> >
opensipstack-devel@lists.sourceforge.net> >
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel> >

------------------------------------------------------------------------>

No virus found in this incoming message.> > Checked by AVG. > >
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date:
5/23/2008 3:36 PM> > > >

Ingresá ya a MSN en Concierto y disfrutá los recitales en vivo de
tus artistas favoritos. MSN en Concierto

_________________________________________________________________
Descargá ya gratis y viví la experiencia Windows Live.
http://www.descubrewindowslive.com/latam/index.html



This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel



This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel



Descargá ya gratis y viví la experiencia Windows Live. Descubre
Windows Live <http://www.descubrewindowslive.com/latam/index.html>



Internal Virus Database is out-of-date.
Checked by AVG.
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date:
5/23/2008 3:36 PM


Ingresá ya a MSN Deportes y enterate de las últimas novedades del
mundo deportivo. MSN Deportes <http://msn.foxsports.com/fslasc/>


Internal Virus Database is out-of-date.
Checked by AVG.
Version: 7.5.524 / Virus Database: 269.24.1/1463 - Release Date: 5/23/2008 3:36 PM


Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel



Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
opensipstack-devel mailing list
opensipstack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensipstack-devel