mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
Final fix memleaks in GkClient codes, same for Timer codes.
(these memleaks stop development of gk codes, now i can continue) Fix printHandler 'Unbalanced Structure' issues with locking printHandler data for single thread. ........ Merged revisions 343281 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 343445 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@343448 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -135,7 +135,7 @@ void dListRemove (DList* pList, DListNode* node)
|
|||||||
pList->count--;
|
pList->count--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dListFindAndRemove(DList* pList, void *data)
|
void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void *data)
|
||||||
{
|
{
|
||||||
DListNode *pNode, *pNextNode;
|
DListNode *pNode, *pNextNode;
|
||||||
for(pNode = pList->head; pNode !=0; pNode = pNextNode){
|
for(pNode = pList->head; pNode !=0; pNode = pNextNode){
|
||||||
@@ -143,8 +143,10 @@ void dListFindAndRemove(DList* pList, void *data)
|
|||||||
if(pNode->data == data) /* pointer comparison*/
|
if(pNode->data == data) /* pointer comparison*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(pNode)
|
if(pNode) {
|
||||||
dListRemove(pList, pNode);
|
dListRemove(pList, pNode);
|
||||||
|
memFreePtr(pctxt, pNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DListNode* dListFindByIndex (DList* pList, int index)
|
DListNode* dListFindByIndex (DList* pList, int index)
|
||||||
|
@@ -192,7 +192,7 @@ EXTERN DListNode* dListInsertAfter
|
|||||||
* already be in the linked list structure.
|
* already be in the linked list structure.
|
||||||
*/
|
*/
|
||||||
EXTERN void dListRemove (DList* pList, DListNode* node);
|
EXTERN void dListRemove (DList* pList, DListNode* node);
|
||||||
void dListFindAndRemove(DList* pList, void* data);
|
EXTERN void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void* data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
@@ -365,7 +365,7 @@ void ooGkClientFillVendor
|
|||||||
|
|
||||||
int ooGkClientReceive(ooGkClient *pGkClient)
|
int ooGkClientReceive(ooGkClient *pGkClient)
|
||||||
{
|
{
|
||||||
ASN1OCTET recvBuf[1024];
|
ASN1OCTET recvBuf[ASN_K_ENCBUFSIZ];
|
||||||
int recvLen;
|
int recvLen;
|
||||||
char remoteHost[32];
|
char remoteHost[32];
|
||||||
int iFromPort=0;
|
int iFromPort=0;
|
||||||
@@ -376,7 +376,7 @@ int ooGkClientReceive(ooGkClient *pGkClient)
|
|||||||
ast_mutex_lock(&pGkClient->Lock);
|
ast_mutex_lock(&pGkClient->Lock);
|
||||||
pctxt = &pGkClient->msgCtxt;
|
pctxt = &pGkClient->msgCtxt;
|
||||||
|
|
||||||
recvLen = ooSocketRecvFrom(pGkClient->rasSocket, recvBuf, 1024, remoteHost,
|
recvLen = ooSocketRecvFrom(pGkClient->rasSocket, recvBuf, 2048, remoteHost,
|
||||||
32, &iFromPort);
|
32, &iFromPort);
|
||||||
if(recvLen <0)
|
if(recvLen <0)
|
||||||
{
|
{
|
||||||
@@ -859,7 +859,6 @@ int ooGkClientHandleGatekeeperConfirm
|
|||||||
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
||||||
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
||||||
OOTRACEDBGA1("Deleted GRQ Timer.\n");
|
OOTRACEDBGA1("Deleted GRQ Timer.\n");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1064,7 +1063,7 @@ int ooGkClientSendRRQ(ooGkClient *pGkClient, ASN1BOOL keepAlive)
|
|||||||
allocate storage for endpoint-identifier, and populate it from what the
|
allocate storage for endpoint-identifier, and populate it from what the
|
||||||
GK told us from the previous RCF. Only allocate on the first pass thru here */
|
GK told us from the previous RCF. Only allocate on the first pass thru here */
|
||||||
pRegReq->endpointIdentifier.data =
|
pRegReq->endpointIdentifier.data =
|
||||||
(ASN116BITCHAR*)memAlloc(pctxt, pGkClient->gkId.nchars*sizeof(ASN116BITCHAR));
|
(ASN116BITCHAR*)memAlloc(pctxt, pGkClient->endpointId.nchars*sizeof(ASN116BITCHAR));
|
||||||
if (pRegReq->endpointIdentifier.data) {
|
if (pRegReq->endpointIdentifier.data) {
|
||||||
pRegReq->endpointIdentifier.nchars = pGkClient->endpointId.nchars;
|
pRegReq->endpointIdentifier.nchars = pGkClient->endpointId.nchars;
|
||||||
pRegReq->m.endpointIdentifierPresent = TRUE;
|
pRegReq->m.endpointIdentifierPresent = TRUE;
|
||||||
@@ -1137,6 +1136,8 @@ int ooGkClientHandleRegistrationConfirm
|
|||||||
ooGkClientTimerCb *cbData;
|
ooGkClientTimerCb *cbData;
|
||||||
ASN1UINT regTTL=0;
|
ASN1UINT regTTL=0;
|
||||||
/* Extract Endpoint Id */
|
/* Extract Endpoint Id */
|
||||||
|
if (pGkClient->endpointId.data)
|
||||||
|
memFreePtr(&pGkClient->ctxt, pGkClient->endpointId.data);
|
||||||
pGkClient->endpointId.nchars =
|
pGkClient->endpointId.nchars =
|
||||||
pRegistrationConfirm->endpointIdentifier.nchars;
|
pRegistrationConfirm->endpointIdentifier.nchars;
|
||||||
pGkClient->endpointId.data = (ASN116BITCHAR*)memAlloc(&pGkClient->ctxt,
|
pGkClient->endpointId.data = (ASN116BITCHAR*)memAlloc(&pGkClient->ctxt,
|
||||||
@@ -1289,7 +1290,6 @@ int ooGkClientHandleRegistrationReject
|
|||||||
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
||||||
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
||||||
OOTRACEDBGA1("Deleted RRQ Timer.\n");
|
OOTRACEDBGA1("Deleted RRQ Timer.\n");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -79,7 +79,7 @@ void ooTimerComputeExpireTime (OOTimer* pTimer)
|
|||||||
|
|
||||||
void ooTimerDelete (OOCTXT* pctxt, DList *pList, OOTimer* pTimer)
|
void ooTimerDelete (OOCTXT* pctxt, DList *pList, OOTimer* pTimer)
|
||||||
{
|
{
|
||||||
dListFindAndRemove (pList, pTimer);
|
dListFindAndRemove (pctxt, pList, pTimer);
|
||||||
memFreePtr (pctxt, pTimer);
|
memFreePtr (pctxt, pTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ void ooTimerFireExpired (OOCTXT* pctxt, DList *pList)
|
|||||||
|
|
||||||
stat = (*pTimer->timeoutCB)(pTimer->cbData);
|
stat = (*pTimer->timeoutCB)(pTimer->cbData);
|
||||||
|
|
||||||
if (0 != stat || !pTimer->reRegister) {
|
if (!pTimer->reRegister) {
|
||||||
ooTimerDelete (pctxt, pList, pTimer);
|
ooTimerDelete (pctxt, pList, pTimer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,7 +175,7 @@ struct timeval* ooTimerNextTimeout (DList *pList, struct timeval* ptimeout)
|
|||||||
void ooTimerReset (OOCTXT* pctxt, DList *pList, OOTimer* pTimer)
|
void ooTimerReset (OOCTXT* pctxt, DList *pList, OOTimer* pTimer)
|
||||||
{
|
{
|
||||||
if (pTimer->reRegister) {
|
if (pTimer->reRegister) {
|
||||||
dListFindAndRemove (pList, pTimer);
|
dListFindAndRemove (pctxt, pList, pTimer);
|
||||||
ooTimerComputeExpireTime (pTimer);
|
ooTimerComputeExpireTime (pTimer);
|
||||||
ooTimerInsertEntry (pctxt, pList, pTimer);
|
ooTimerInsertEntry (pctxt, pList, pTimer);
|
||||||
}
|
}
|
||||||
|
@@ -512,7 +512,7 @@ int ooFreeQ931Message(OOCTXT* pctxt, Q931Message *q931Msg)
|
|||||||
|
|
||||||
int ooEncodeUUIE(OOCTXT* pctxt, Q931Message *q931msg)
|
int ooEncodeUUIE(OOCTXT* pctxt, Q931Message *q931msg)
|
||||||
{
|
{
|
||||||
ASN1OCTET msgbuf[1024];
|
ASN1OCTET msgbuf[ASN_K_ENCBUFSIZ];
|
||||||
ASN1OCTET * msgptr=NULL;
|
ASN1OCTET * msgptr=NULL;
|
||||||
int len;
|
int len;
|
||||||
ASN1BOOL aligned = TRUE;
|
ASN1BOOL aligned = TRUE;
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include "ootrace.h"
|
#include "ootrace.h"
|
||||||
|
|
||||||
EventHandler printHandler;
|
EventHandler printHandler;
|
||||||
|
AST_MUTEX_DEFINE_STATIC(printlock);
|
||||||
|
|
||||||
static const char* pVarName;
|
static const char* pVarName;
|
||||||
static int gIndentSpaces;
|
static int gIndentSpaces;
|
||||||
@@ -60,6 +61,7 @@ void initializePrintHandler(EventHandler *printHandler, char * varname)
|
|||||||
printHandler->enumValue = &printEnumValue;
|
printHandler->enumValue = &printEnumValue;
|
||||||
printHandler->openTypeValue = &printOpenTypeValue;
|
printHandler->openTypeValue = &printOpenTypeValue;
|
||||||
pVarName = varname;
|
pVarName = varname;
|
||||||
|
ast_mutex_lock(&printlock);
|
||||||
OOTRACEDBGB2("%s = {\n", pVarName);
|
OOTRACEDBGB2("%s = {\n", pVarName);
|
||||||
gIndentSpaces += 3;
|
gIndentSpaces += 3;
|
||||||
|
|
||||||
@@ -72,6 +74,8 @@ void finishPrint()
|
|||||||
if (gIndentSpaces != 0) {
|
if (gIndentSpaces != 0) {
|
||||||
OOTRACEDBGB1 ("ERROR: unbalanced structure\n");
|
OOTRACEDBGB1 ("ERROR: unbalanced structure\n");
|
||||||
}
|
}
|
||||||
|
gIndentSpaces = 0;
|
||||||
|
ast_mutex_unlock(&printlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void indent ()
|
void indent ()
|
||||||
|
Reference in New Issue
Block a user