[sipxtapi] r1423 committed - Applied patch from Saab:...

4 views
Skip to first unread message

codesite...@google.com

unread,
Feb 7, 2011, 5:27:48 PM2/7/11
to sipxtapi...@googlegroups.com
Revision: 1423
Author: jaroslavl1
Date: Mon Feb 7 14:24:10 2011
Log: Applied patch from Saab:
- Fixed memory leak where messages were not removed from message list as
pointer equality would never be true due to the intances being copied right
before being added (SipRefreshMgr::addToRegisterList)
- remove no longer relies on pointer comparison alone to determine whether
to remove a message - if pointer comparison fails "isSameMessage" is called
as well.
- In case the match was due to "isSameMessage" the message returned from
the messageList is deleted to avoid a memory leak.
- The remove(int iteratorHandle) now optionally deletes the SipMessage as
well.
http://code.google.com/p/sipxtapi/source/detail?r=1423

Modified:
/trunk/sipXtackLib/include/net/SipMessageList.h
/trunk/sipXtackLib/src/net/SipMessageList.cpp

=======================================
--- /trunk/sipXtackLib/include/net/SipMessageList.h Fri Jan 25 13:27:59 2008
+++ /trunk/sipXtackLib/include/net/SipMessageList.h Mon Feb 7 14:24:10 2011
@@ -69,7 +69,7 @@
void add(SipMessage* message);

void removeOldMessages(long oldTime, UtlBoolean deleteMessages = TRUE);
- void remove(int iteratorHandle);
+ void remove(int iteratorHandle, UtlBoolean deleteMessage = TRUE);

void toString(UtlString& listDumpString);

=======================================
--- /trunk/sipXtackLib/src/net/SipMessageList.cpp Fri Jan 25 13:27:59 2008
+++ /trunk/sipXtackLib/src/net/SipMessageList.cpp Mon Feb 7 14:24:10 2011
@@ -291,13 +291,18 @@
osPrintf("\nSipMessageList::remove parameter Message %s
\n-------\n",MessageStr.data());
#endif

- if(listMessage == message)
+ //if(listMessage == message)
+ if(listMessage == message || listMessage->isSameMessage(message,
TRUE))
{
#ifdef TEST_PRINT
osPrintf("SipMessageList::remove removing message\n");
#endif
messageList.remove(iteratorHandle);
-
+ if(listMessage != message)
+ {
+ // If the parameter message does not match the listMessage
then delete the list message as well or we have a memory leak
+ delete listMessage;
+ }
break;
}
}
@@ -311,9 +316,13 @@
messageList.push(message);
}

-void SipMessageList::remove(int iteratorHandle)
-{
- messageList.remove(iteratorHandle);
+void SipMessageList::remove(int iteratorHandle, UtlBoolean deleteMessage)
+{
+ SipMessage *msg = (SipMessage*)messageList.remove(iteratorHandle);
+ if(deleteMessage && msg)
+ {
+ delete msg;
+ }
}

void SipMessageList::removeOldMessages(long oldTime, UtlBoolean
deleteMessages)

Reply all
Reply to author
Forward
0 new messages