[asterisk-commits] mmichelson: trunk r95096 - in /trunk: ./ apps/app_queue.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Dec 27 18:17:42 CST 2007


Author: mmichelson
Date: Thu Dec 27 18:17:41 2007
New Revision: 95096

URL: http://svn.digium.com/view/asterisk?view=rev&rev=95096
Log:
Merged revisions 95095 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r95095 | mmichelson | 2007-12-27 18:16:15 -0600 (Thu, 27 Dec 2007) | 8 lines

I found a bug while browsing the queue code and managed to reproduce it in a small setup.

If a queue uses the ringall strategy, it was possible through unfortunate coincidence for a single member at a given penalty level to
make app_queue think that all members at that penalty level were unavailable and cause the members at the
next penalty level to be rung. With this patch, we will only move to the next penalty level if ALL the members
at a given penalty level are unreachable.


........

Modified:
    trunk/   (props changed)
    trunk/apps/app_queue.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_queue.c?view=diff&rev=95096&r1=95095&r2=95096
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Thu Dec 27 18:17:41 2007
@@ -2158,16 +2158,14 @@
 			for (cur = outgoing; cur; cur = cur->q_next) {
 				if (cur->stillgoing && !cur->chan && cur->metric <= best->metric) {
 					ast_debug(1, "(Parallel) Trying '%s' with metric %d\n", cur->interface, cur->metric);
-					ring_entry(qe, cur, busies);
+					ret |= ring_entry(qe, cur, busies);
 				}
 			}
 		} else {
 			/* Ring just the best channel */
 			ast_debug(1, "Trying '%s' with metric %d\n", best->interface, best->metric);
-			ring_entry(qe, best, busies);
-		}
-		if (best->chan) /* break out with result = 1 */
-			ret = 1;
+			ret = ring_entry(qe, best, busies);
+		}
 	}
 
 	return ret;




More information about the asterisk-commits mailing list