dect
/
asterisk
Archived
13
0
Fork 0

Make sure when the timeout occurs that we actually break the bridge (bug #5252)

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6791 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
markster 2005-10-14 17:02:20 +00:00
parent 9521172e85
commit 8dd051949d
5 changed files with 21 additions and 5 deletions

View File

@ -2974,12 +2974,16 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
}
who = ast_waitfor_n(cs, 2, &toms);
if (!who) {
if (!toms) {
res = AST_BRIDGE_RETRY;
break;
}
ast_log(LOG_DEBUG, "Nobody there, continuing...\n");
if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE || c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE) {
if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
c0->_softhangup = 0;
if (c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
c1->_softhangup = 0;
c0->_softhangup = 0;
if (c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
c1->_softhangup = 0;
c0->_bridge = c1;
c1->_bridge = c0;
}
@ -3215,7 +3219,8 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
ast_clear_flag(c0, AST_FLAG_NBRIDGE);
ast_clear_flag(c1, AST_FLAG_NBRIDGE);
}
if (res == AST_BRIDGE_RETRY)
continue;
switch (res) {
case AST_BRIDGE_RETRY:
/* continue; */

View File

@ -3184,6 +3184,10 @@ static enum ast_bridge_result iax2_bridge(struct ast_channel *c0, struct ast_cha
timeoutms = 0;
}
if (!who) {
if (!timeoutms) {
res = AST_BRIDGE_RETRY;
break;
}
if (ast_check_hangup(c0) || ast_check_hangup(c1)) {
res = AST_BRIDGE_FAILED;
break;

View File

@ -518,6 +518,10 @@ static enum ast_bridge_result vpb_bridge(struct ast_channel *c0, struct ast_chan
/* Are we really ment to be doing nothing ?!?! */
who = ast_waitfor_n(cs, 2, &timeoutms);
if (!who) {
if (!timeoutms) {
res = AST_BRIDGE_RETRY;
break;
}
ast_log(LOG_DEBUG, "%s: vpb_bridge: Empty frame read...\n",p0->dev);
/* check for hangup / whentohangup */
if (ast_check_hangup(c0) || ast_check_hangup(c1))

View File

@ -3139,7 +3139,8 @@ static enum ast_bridge_result zt_bridge(struct ast_channel *c0, struct ast_chann
ast_mutex_unlock(&c0->lock);
ast_mutex_unlock(&c1->lock);
if ((op0 != p0) ||
if (!timeoutms ||
(op0 != p0) ||
(op1 != p1) ||
(ofd0 != c0->fds[0]) ||
(ofd1 != c1->fds[0]) ||

2
rtp.c
View File

@ -1677,6 +1677,8 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
}
who = ast_waitfor_n(cs, 2, &timeoutms);
if (!who) {
if (!timeoutms)
return AST_BRIDGE_RETRY;
if (option_debug)
ast_log(LOG_DEBUG, "Ooh, empty read...\n");
/* check for hangup / whentohangup */