[svn-commits] irroot: trunk r344979 - in /trunk: ./ channels/chan_misdn.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Nov 12 10:32:49 CST 2011


Author: irroot
Date: Sat Nov 12 10:32:45 2011
New Revision: 344979

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=344979
Log:
mISDN Round Robin break when no channel is available

Prevent channels been parsed repetitively.
........

Merged revisions 344965 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 344966 from http://svn.asterisk.org/svn/asterisk/branches/10

Modified:
    trunk/   (props changed)
    trunk/channels/chan_misdn.c

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

Modified: trunk/channels/chan_misdn.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_misdn.c?view=diff&rev=344979&r1=344978&r2=344979
==============================================================================
--- trunk/channels/chan_misdn.c (original)
+++ trunk/channels/chan_misdn.c Sat Nov 12 10:32:45 2011
@@ -7891,6 +7891,7 @@
 			int port_up;
 			int check;
 			int maxbchans;
+			int wraped = 0;
 
 			if (!rr->port) {
 				rr->port = misdn_cfg_get_next_port_spin(0);
@@ -7905,6 +7906,7 @@
 			do {
 				misdn_cfg_get(rr->port, MISDN_CFG_GROUPNAME, cfg_group, sizeof(cfg_group));
 				if (strcasecmp(cfg_group, group)) {
+					wraped = 1;
 					rr->port = misdn_cfg_get_next_port_spin(rr->port);
 					rr->channel = 1;
 					continue;
@@ -7926,6 +7928,11 @@
 					maxbchans = misdn_lib_get_maxchans(rr->port);
 
 					for (;rr->channel <= maxbchans;rr->channel++) {
+						/* ive come full circle and can stop now */
+						if (wraped && (rr->port == port_start) && (rr->channel == bchan_start)) {
+							break;
+						}
+
 						chan_misdn_log(4, rr->port, "Checking channel %d\n",  rr->channel);
 
 						if ((newbc = misdn_lib_get_free_bc(rr->port, rr->channel, 0, 0))) {
@@ -7934,15 +7941,16 @@
 							break;
 						}
 					}
-					if (!newbc || (rr->channel > maxbchans)) {
+					if (wraped && (rr->port == port_start) && (rr->channel <= bchan_start)) {
+						break;
+					} else if (!newbc || (rr->channel == maxbchans)) {
 						rr->port = misdn_cfg_get_next_port_spin(rr->port);
 						rr->channel = 1;
 					}
 
 				}
-			} while (!newbc && (rr->port > 0) &&
-				 ((rr->port != port_start) || ((rr->port == port_start) && (rr->channel < bchan_start))));
-
+				wraped = 1;
+			} while (!newbc && (rr->port > 0));
 		} else {
 			for (port = misdn_cfg_get_next_port(0); port > 0;
 				port = misdn_cfg_get_next_port(port)) {




More information about the svn-commits mailing list