[asterisk-commits] rmudgett: trunk r251585 - /trunk/channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Mar 10 10:55:39 CST 2010


Author: rmudgett
Date: Wed Mar 10 10:55:34 2010
New Revision: 251585

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=251585
Log:
Simplified dahdi_request() channel selection failed reason/cause code.

Also avoid potential crash because cause could be NULL.

Modified:
    trunk/channels/chan_dahdi.c
    trunk/channels/sig_analog.c
    trunk/channels/sig_analog.h
    trunk/channels/sig_pri.c
    trunk/channels/sig_pri.h

Modified: trunk/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_dahdi.c?view=diff&rev=251585&r1=251584&r2=251585
==============================================================================
--- trunk/channels/chan_dahdi.c (original)
+++ trunk/channels/chan_dahdi.c Wed Mar 10 10:55:34 2010
@@ -11880,7 +11880,7 @@
 	return tmp;
 }
 
-static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t groupmatch, int *reason, int *channelmatched, int *groupmatched)
+static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t groupmatch, int *channelmatched, int *groupmatched)
 {
 	/* First, check group matching */
 	if (groupmatch) {
@@ -11899,12 +11899,12 @@
 		return 0;
 
 	if (analog_lib_handles(p->sig, p->radio, p->oprmode))
-		return analog_available(p->sig_pvt, reason);
+		return analog_available(p->sig_pvt);
 
 #ifdef HAVE_PRI
 	switch (p->sig) {
 	case SIG_PRI_LIB_HANDLE_CASES:
-		return sig_pri_available(p->sig_pvt, reason);
+		return sig_pri_available(p->sig_pvt);
 	default:
 		break;
 	}
@@ -12094,7 +12094,6 @@
 	int channelmatch = -1;
 	int roundrobin = 0;
 	int callwait = 0;
-	int unavailreason = 0;
 	struct dahdi_pvt *p;
 	struct ast_channel *tmp = NULL;
 	char *dest;
@@ -12200,7 +12199,7 @@
 		ast_verbose("name = %s, %d, %d, %llu\n",p->owner ? p->owner->name : "<none>", p->channel, channelmatch, groupmatch);
 #endif
 
-		if (p && available(p, channelmatch, groupmatch, &unavailreason, &channelmatched, &groupmatched)) {
+		if (p && available(p, channelmatch, groupmatch, &channelmatched, &groupmatched)) {
 			ast_debug(1, "Using channel %d\n", p->channel);
 
 			callwait = (p->owner != NULL);
@@ -12277,14 +12276,16 @@
 	}
 	ast_mutex_unlock(&iflock);
 	restart_monitor();
-	if (callwait)
-		*cause = AST_CAUSE_BUSY;
-	else if (!tmp) {
-		if (channelmatched) {
-			if (unavailreason)
-				*cause = AST_CAUSE_BUSY;
+	if (cause && !tmp) {
+		if (callwait || channelmatched) {
+			*cause = AST_CAUSE_BUSY;
 		} else if (groupmatched) {
-			*cause = (unavailreason) ? unavailreason : AST_CAUSE_CONGESTION;
+			*cause = AST_CAUSE_CONGESTION;
+		} else {
+			/*
+			 * We did not match any channel requested.
+			 * Dialplan error requesting non-existant channel?
+			 */
 		}
 	}
 

Modified: trunk/channels/sig_analog.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_analog.c?view=diff&rev=251585&r1=251584&r2=251585
==============================================================================
--- trunk/channels/sig_analog.c (original)
+++ trunk/channels/sig_analog.c Wed Mar 10 10:55:34 2010
@@ -649,17 +649,11 @@
 	return analog_new_ast_channel(p, AST_STATE_RESERVED, 0, p->owner ? ANALOG_SUB_CALLWAIT : ANALOG_SUB_REAL, requestor);
 }
 
-int analog_available(struct analog_pvt *p, int *busy)
+int analog_available(struct analog_pvt *p)
 {
 	int offhook;
 
 	ast_log(LOG_DEBUG, "%s %d\n", __FUNCTION__, p->channel);
-	/* We're at least busy at this point */
-	if (busy) {
-		if ((p->sig == ANALOG_SIG_FXOKS) || (p->sig == ANALOG_SIG_FXOLS) || (p->sig == ANALOG_SIG_FXOGS)) {
-			*busy = 1;
-		}
-	}
 	/* If do not disturb, definitely not */
 	if (p->dnd) {
 		return 0;

Modified: trunk/channels/sig_analog.h
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_analog.h?view=diff&rev=251585&r1=251584&r2=251585
==============================================================================
--- trunk/channels/sig_analog.h (original)
+++ trunk/channels/sig_analog.h Wed Mar 10 10:55:34 2010
@@ -336,7 +336,7 @@
 
 struct ast_channel * analog_request(struct analog_pvt *p, int *callwait, const struct ast_channel *requestor);
 
-int analog_available(struct analog_pvt *p, int *busy);
+int analog_available(struct analog_pvt *p);
 
 void *analog_handle_init_event(struct analog_pvt *i, int event);
 

Modified: trunk/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_pri.c?view=diff&rev=251585&r1=251584&r2=251585
==============================================================================
--- trunk/channels/sig_pri.c (original)
+++ trunk/channels/sig_pri.c Wed Mar 10 10:55:34 2010
@@ -3863,22 +3863,17 @@
 	return res;
 }
 
-int sig_pri_available(struct sig_pri_chan *p, int *reason)
+int sig_pri_available(struct sig_pri_chan *p)
 {
 	/* If no owner and interface has a B channel then likely available */
 	if (!p->owner && !p->no_b_channel && p->pri) {
+		if (p->resetting || p->call
 #if defined(HAVE_PRI_SERVICE_MESSAGES)
-		if (p->resetting || p->call || p->service_status) {
-			if (p->service_status) {
-				*reason = AST_CAUSE_REQUESTED_CHAN_UNAVAIL;
-			}
+			|| p->service_status
+#endif	/* defined(HAVE_PRI_SERVICE_MESSAGES) */
+			) {
 			return 0;
 		}
-#else
-		if (p->resetting || p->call) {
-			return 0;
-		}
-#endif	/* defined(HAVE_PRI_SERVICE_MESSAGES) */
 		return 1;
 	}
 

Modified: trunk/channels/sig_pri.h
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_pri.h?view=diff&rev=251585&r1=251584&r2=251585
==============================================================================
--- trunk/channels/sig_pri.h (original)
+++ trunk/channels/sig_pri.h Wed Mar 10 10:55:34 2010
@@ -261,7 +261,7 @@
 
 int sig_pri_answer(struct sig_pri_chan *p, struct ast_channel *ast);
 
-int sig_pri_available(struct sig_pri_chan *p, int *reason);
+int sig_pri_available(struct sig_pri_chan *p);
 
 void sig_pri_init_pri(struct sig_pri_pri *pri);
 




More information about the asterisk-commits mailing list