Merged revisions 217990 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

................
  r217990 | tilghman | 2009-09-10 18:54:51 -0500 (Thu, 10 Sep 2009) | 10 lines
  
  Merged revisions 217989 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
    r217989 | tilghman | 2009-09-10 18:52:22 -0500 (Thu, 10 Sep 2009) | 3 lines
    
    Don't ring another channel, if there's not enough time for a queue member to answer.
    (Fixes AST-228)
  ........
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@218053 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2009-09-11 05:59:17 +00:00
parent 87641f061a
commit 6d32c10c14

View File

@@ -2300,6 +2300,7 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies
/* Inherit specially named variables from parent channel */
ast_channel_inherit_variables(qe->chan, tmp->chan);
ast_channel_datastore_inherit(qe->chan, tmp->chan);
/* Presense of ADSI CPE on outgoing channel follows ours */
tmp->chan->adsicpe = qe->chan->adsicpe;
@@ -2655,7 +2656,11 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
*to = 0;
return NULL;
}
/* Poll for events from both the incoming channel as well as any outgoing channels */
winner = ast_waitfor_n(watchers, pos, to);
/* Service all of the outgoing channels */
for (o = start; o; o = o->call_next) {
if (o->stillgoing && (o->chan) && (o->chan->_state == AST_STATE_UP)) {
if (!peer) {
@@ -2749,7 +2754,11 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
if (qe->parent->timeoutrestart)
*to = orig;
ring_one(qe, outgoing, &numbusies);
/* Have enough time for a queue member to answer? */
if (*to > 500) {
ring_one(qe, outgoing, &numbusies);
starttime = (long) time(NULL);
}
}
numbusies++;
break;
@@ -2764,7 +2773,10 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
if (qe->parent->timeoutrestart)
*to = orig;
ring_one(qe, outgoing, &numbusies);
if (*to > 500) {
ring_one(qe, outgoing, &numbusies);
starttime = (long) time(NULL);
}
}
numbusies++;
break;
@@ -2779,18 +2791,23 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
}
}
ast_frfree(f);
} else {
} else { /* ast_read() returned NULL */
endtime = (long) time(NULL) - starttime;
rna(endtime * 1000, qe, on, membername, 1);
do_hang(o);
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
if (qe->parent->timeoutrestart)
*to = orig;
ring_one(qe, outgoing, &numbusies);
if (*to > 500) {
ring_one(qe, outgoing, &numbusies);
starttime = (long) time(NULL);
}
}
}
}
}
/* If we received an event from the caller, deal with it. */
if (winner == in) {
f = ast_read(in);
if (!f || ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP))) {