Backport changes of trunk:

1) r43540: Avoid possible deadlock on channel destruction
2) r43590: Disable fastStart if requested by remote side


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@43626 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Paul Cadach 19 years ago
parent 4238648bb6
commit b2b256eeef

@ -2442,34 +2442,36 @@ static void *do_monitor(void *data)
h323_do_reload();
}
/* Check for interfaces needing to be killed */
ast_mutex_lock(&iflock);
if (!ast_mutex_trylock(&iflock)) {
#if 1
do {
for (oh323 = iflist; oh323; oh323 = oh323->next) {
do {
for (oh323 = iflist; oh323; oh323 = oh323->next) {
if (!ast_mutex_trylock(&oh323->lock)) {
if (oh323->needdestroy) {
__oh323_destroy(oh323);
break;
}
ast_mutex_unlock(&oh323->lock);
}
}
} while (/*oh323*/ 0);
#else
restartsearch:
oh323 = iflist;
while(oh323) {
if (!ast_mutex_trylock(&oh323->lock)) {
if (oh323->needdestroy) {
__oh323_destroy(oh323);
break;
goto restartsearch;
}
ast_mutex_unlock(&oh323->lock);
oh323 = oh323->next;
}
}
} while (/*oh323*/ 0);
#else
restartsearch:
oh323 = iflist;
while(oh323) {
if (!ast_mutex_trylock(&oh323->lock)) {
if (oh323->needdestroy) {
__oh323_destroy(oh323);
goto restartsearch;
}
ast_mutex_unlock(&oh323->lock);
oh323 = oh323->next;
}
}
#endif
ast_mutex_unlock(&iflock);
ast_mutex_unlock(&iflock);
} else
oh323 = (struct oh323_pvt *)1; /* Force fast loop */
pthread_testcancel();
/* Wait for sched or io */
res = ast_sched_wait(sched);

@ -37,6 +37,7 @@
#include <ptlib.h>
#include <h323.h>
#include <h323pdu.h>
#include <h323neg.h>
#include <mediafmt.h>
#include <lid.h>
@ -1105,6 +1106,14 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU)
SetCallOptions(res, TRUE);
/* Disable fastStart if requested by remote side */
if (h245Tunneling && !setupPDU.m_h323_uu_pdu.m_h245Tunneling) {
masterSlaveDeterminationProcedure->Stop();
capabilityExchangeProcedure->Stop();
PTRACE(3, "H225\tFast Start DISABLED!");
h245Tunneling = FALSE;
}
return H323Connection::OnReceivedSignalSetup(setupPDU);
}

Loading…
Cancel
Save