mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-15 06:18:38 +00:00
cleanups in ACF/ARJ GK replies processing
fixed long (24 sec) pause if acf/arj proccessed before ast_cond_wait called to wait this git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@333947 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -430,7 +430,7 @@ int ooGkClientReceive(ooGkClient *pGkClient)
|
||||
if(iRet != OO_OK)
|
||||
{
|
||||
OOTRACEERR1("Error: Failed to handle received RAS message\n");
|
||||
//pGkClient->state = GkClientFailed;
|
||||
pGkClient->state = GkClientFailed;
|
||||
}
|
||||
memReset(pctxt);
|
||||
}
|
||||
@@ -1920,6 +1920,8 @@ int ooGkClientHandleAdmissionConfirm
|
||||
OOTimer *pTimer = NULL;
|
||||
char ip[20];
|
||||
|
||||
ast_mutex_lock(&pGkClient->Lock);
|
||||
|
||||
/* Search call in pending calls list */
|
||||
for(x=0 ; x<pGkClient->callsPendingList.count; x++)
|
||||
{
|
||||
@@ -1930,6 +1932,9 @@ int ooGkClientHandleAdmissionConfirm
|
||||
OOTRACEDBGC3("Found Pending call(%s, %s)\n",
|
||||
pCallAdmInfo->call->callType,
|
||||
pCallAdmInfo->call->callToken);
|
||||
|
||||
ast_mutex_lock(&pCallAdmInfo->call->GkLock);
|
||||
|
||||
/* Populate Remote IP */
|
||||
if(pAdmissionConfirm->destCallSignalAddress.t !=
|
||||
T_H225TransportAddress_ipAddress)
|
||||
@@ -1938,6 +1943,9 @@ int ooGkClientHandleAdmissionConfirm
|
||||
"Gatekeeper is not an IPv4 address\n");
|
||||
OOTRACEINFO1("Ignoring ACF, will wait for timeout and retransmit "
|
||||
"ARQ\n");
|
||||
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
|
||||
ast_mutex_unlock(&pGkClient->Lock);
|
||||
ast_cond_signal(&pCallAdmInfo->call->gkWait);
|
||||
return OO_FAILED;
|
||||
}
|
||||
ipAddress = pAdmissionConfirm->destCallSignalAddress.u.ipAddress;
|
||||
@@ -1996,15 +2004,15 @@ int ooGkClientHandleAdmissionConfirm
|
||||
pCallAdmInfo->call->callToken);
|
||||
|
||||
pCallAdmInfo->call->callState = OO_CALL_CONNECTING;
|
||||
/* ooH323CallAdmitted( pCallAdmInfo->call); */
|
||||
|
||||
dListRemove(&pGkClient->callsPendingList, pNode);
|
||||
dListAppend(&pGkClient->ctxt, &pGkClient->callsAdmittedList,
|
||||
pNode->data);
|
||||
memFreePtr(&pGkClient->ctxt, pNode);
|
||||
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
|
||||
ast_mutex_unlock(&pGkClient->Lock);
|
||||
ast_cond_signal(&pCallAdmInfo->call->gkWait);
|
||||
return OO_OK;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2013,6 +2021,7 @@ int ooGkClientHandleAdmissionConfirm
|
||||
}
|
||||
OOTRACEERR1("Error: Failed to process ACF as there is no corresponding "
|
||||
"pending call\n");
|
||||
ast_mutex_unlock(&pGkClient->Lock);
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
@@ -2026,6 +2035,8 @@ int ooGkClientHandleAdmissionReject
|
||||
OOH323CallData *call=NULL;
|
||||
OOTimer *pTimer = NULL;
|
||||
|
||||
ast_mutex_lock(&pGkClient->Lock);
|
||||
|
||||
/* Search call in pending calls list */
|
||||
for(x=0 ; x<pGkClient->callsPendingList.count; x++)
|
||||
{
|
||||
@@ -2042,6 +2053,7 @@ int ooGkClientHandleAdmissionReject
|
||||
OOTRACEWARN2("Received admission reject with request number %d can not"
|
||||
" be matched with any pending call.\n",
|
||||
pAdmissionReject->requestSeqNum);
|
||||
ast_mutex_unlock(&pGkClient->Lock);
|
||||
return OO_OK;
|
||||
}
|
||||
else{
|
||||
@@ -2050,6 +2062,7 @@ int ooGkClientHandleAdmissionReject
|
||||
memFreePtr(&pGkClient->ctxt, pCallAdmInfo);
|
||||
memFreePtr(&pGkClient->ctxt, pNode);
|
||||
}
|
||||
ast_mutex_lock(&pCallAdmInfo->call->GkLock);
|
||||
|
||||
/* Delete ARQ timer */
|
||||
for(y=0; y<pGkClient->timerList.count; y++)
|
||||
@@ -2114,6 +2127,8 @@ int ooGkClientHandleAdmissionReject
|
||||
break;
|
||||
}
|
||||
|
||||
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
|
||||
ast_mutex_unlock(&pGkClient->Lock);
|
||||
ast_cond_signal(&pCallAdmInfo->call->gkWait);
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user