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:
parent
9521172e85
commit
8dd051949d
13
channel.c
13
channel.c
|
@ -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; */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
2
rtp.c
|
@ -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 */
|
||||
|
|
Reference in New Issue