[asterisk-commits] mmichelson: branch mmichelson/issue13220 r182958 - /team/mmichelson/issue1322...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Mar 18 13:54:45 CDT 2009
Author: mmichelson
Date: Wed Mar 18 13:54:41 2009
New Revision: 182958
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=182958
Log:
Convert is_our_turn to use the new num_available_members function
Modified:
team/mmichelson/issue13220/apps/app_queue.c
Modified: team/mmichelson/issue13220/apps/app_queue.c
URL: http://svn.digium.com/svn-view/asterisk/team/mmichelson/issue13220/apps/app_queue.c?view=diff&rev=182958&r1=182957&r2=182958
==============================================================================
--- team/mmichelson/issue13220/apps/app_queue.c (original)
+++ team/mmichelson/issue13220/apps/app_queue.c Wed Mar 18 13:54:41 2009
@@ -2369,6 +2369,7 @@
return peer;
}
+
/*! \brief Check if we should start attempting to call queue members
*
* The behavior of this function is dependent first on whether autofill is enabled
@@ -2381,9 +2382,6 @@
static int is_our_turn(struct queue_ent *qe)
{
struct queue_ent *ch;
- struct member *cur;
- int avl = 0;
- int idx = 0;
int res;
if (!qe->parent->autofill) {
@@ -2401,41 +2399,24 @@
}
} else {
+ int avl = num_available_members(qe->parent);
+ int idx = 0;
/* This needs a lock. How many members are available to be served? */
ast_mutex_lock(&qe->parent->lock);
ch = qe->parent->head;
-
- if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
- if (option_debug)
- ast_log(LOG_DEBUG, "Even though there may be multiple members available, the strategy is ringall so only the head call is allowed in\n");
- avl = 1;
- } else {
- struct ao2_iterator mem_iter = ao2_iterator_init(qe->parent->members, 0);
- while ((cur = ao2_iterator_next(&mem_iter))) {
- switch (cur->status) {
- case AST_DEVICE_INUSE:
- if (!qe->parent->ringinuse)
- break;
- /* else fall through */
- case AST_DEVICE_NOT_INUSE:
- case AST_DEVICE_UNKNOWN:
- if (!cur->paused)
- avl++;
- break;
- }
- ao2_ref(cur, -1);
- }
- }
-
- if (option_debug)
+
+ if (option_debug) {
ast_log(LOG_DEBUG, "There are %d available members.\n", avl);
+ }
while ((idx < avl) && (ch) && (ch != qe)) {
if (!ch->pending)
idx++;
ch = ch->next;
}
+
+ ast_mutex_unlock(&qe->parent->lock);
/* If the queue entry is within avl [the number of available members] calls from the top ... */
if (ch && idx < avl) {
@@ -2448,7 +2429,6 @@
res = 0;
}
- ast_mutex_unlock(&qe->parent->lock);
}
return res;
More information about the asterisk-commits
mailing list