]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
move ast_cond_signal for admitted call after all data filled/freed
authorAlexandr Anikin <may@telecom-service.ru>
Tue, 9 Aug 2011 16:13:09 +0000 (16:13 +0000)
committerAlexandr Anikin <may@telecom-service.ru>
Tue, 9 Aug 2011 16:13:09 +0000 (16:13 +0000)
clear all log channels by pointed number not only first
free allocated callToken in ooh323_answer

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@331146 65c4cc65-6c06-0410-ace0-fbb531ad65f3

addons/chan_ooh323.c
addons/ooh323c/src/ooGkClient.c
addons/ooh323c/src/ooLogChan.c

index 221839904ebfed40c0cb3662f0f2f8fcc1cbf395..c3467769845752535278c4d6c9418f35e77c4eac 100644 (file)
@@ -1106,6 +1106,9 @@ static int ooh323_answer(struct ast_channel *ast)
                        ast_channel_unlock(ast);
                        ooAnswerCall(p->callToken);
                }
+               if (callToken) {
+                       free(callToken);
+               }
                ast_mutex_unlock(&p->lock);
        }
 
index e6b036689123b6f0901662c14ff2c32c1320f5c9..f3e3d16e8b2051e683b20af00961c4b137aa0049 100644 (file)
@@ -1996,13 +1996,13 @@ int ooGkClientHandleAdmissionConfirm
                        pCallAdmInfo->call->callToken);
 
         pCallAdmInfo->call->callState = OO_CALL_CONNECTING;
-        ast_cond_signal(&pCallAdmInfo->call->gkWait);
          /* ooH323CallAdmitted( pCallAdmInfo->call); */
 
          dListRemove(&pGkClient->callsPendingList, pNode);
          dListAppend(&pGkClient->ctxt, &pGkClient->callsAdmittedList, 
                                                         pNode->data);
          memFreePtr(&pGkClient->ctxt, pNode);
+        ast_cond_signal(&pCallAdmInfo->call->gkWait);
          return OO_OK;
          break;
       }
index b230edef42ae4e1f3671353b2842be1d468e4686..f7a009763c38d0407ce129a35d092b657f4a2a17 100644 (file)
@@ -284,7 +284,7 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
                  call->callType, call->callToken);
 
    pLogicalChannel = ooFindLogicalChannelByLogicalChannelNo(call,channelNo);
-   if(!pLogicalChannel)
+   do { if(!pLogicalChannel)
    {
       OOTRACEWARN4("Logical Channel %d doesn't exist, in clearLogicalChannel."
                    " (%s, %s)\n",
@@ -326,6 +326,7 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
    ooRemoveLogicalChannel(call, channelNo);/* TODO: efficiency - This causes re-search of
                                                     of logical channel in the list. Can be
                                                     easily improved.*/
+   }  while ((pLogicalChannel = ooFindLogicalChannelByLogicalChannelNo(call,channelNo)));
    return OO_OK;
 }