[svn-commits] russell: branch russell/chan_refcount r115264 - /team/russell/chan_refcount/a...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri May 2 21:40:05 CDT 2008


Author: russell
Date: Fri May  2 21:40:04 2008
New Revision: 115264

URL: http://svn.digium.com/view/asterisk?view=rev&rev=115264
Log:
Convert app_directed_pickup to the new API.  The branch is compiling again, yay.

Modified:
    team/russell/chan_refcount/apps/app_directed_pickup.c

Modified: team/russell/chan_refcount/apps/app_directed_pickup.c
URL: http://svn.digium.com/view/asterisk/team/russell/chan_refcount/apps/app_directed_pickup.c?view=diff&rev=115264&r1=115263&r2=115264
==============================================================================
--- team/russell/chan_refcount/apps/app_directed_pickup.c (original)
+++ team/russell/chan_refcount/apps/app_directed_pickup.c Fri May  2 21:40:04 2008
@@ -97,10 +97,11 @@
 }
 
 /*! \brief Helper Function to walk through ALL channels checking NAME and STATE */
-static struct ast_channel *my_ast_get_channel_by_name_locked(char *channame)
+static struct ast_channel *get_channel_by_name(char *channame)
 {
 	struct ast_channel *chan;
 	char *chkchan = alloca(strlen(channame) + 2);
+	struct ast_channel_iterator *iter;
 
 	/* need to append a '-' for the comparison so we check full channel name,
 	 * i.e SIP/hgc- , use a temporary variable so original stays the same for
@@ -109,13 +110,20 @@
 	strcpy(chkchan, channame);
 	strcat(chkchan, "-");
 
-	for (chan = ast_walk_channel_by_name_prefix_locked(NULL, channame, strlen(channame));
-		 chan;
-		 chan = ast_walk_channel_by_name_prefix_locked(chan, channame, strlen(channame))) {
-		if (!strncasecmp(chan->name, chkchan, strlen(chkchan)) && can_pickup(chan))
+	if (!(iter = ast_channel_iterator_by_name_new(0, channame, strlen(channame)))) {
+		return NULL;
+	}
+
+	while ((chan = ast_channel_iterator_next(iter))) {
+		if (!strncasecmp(chan->name, chkchan, strlen(chkchan)) && can_pickup(chan)) {
 			return chan;
-		ast_channel_unlock(chan);
-	}
+		}
+
+		ast_channel_unref(chan);
+	}
+
+	ast_channel_iterator_destroy(iter);
+
 	return NULL;
 }
 
@@ -125,14 +133,16 @@
 	int res = 0;
 	struct ast_channel *target;
 
-	if (!(target = my_ast_get_channel_by_name_locked(pickup)))
-		return -1;
+	if (!(target = get_channel_by_name(pickup))) {
+		return -1;
+	}
 
 	/* Just check that we are not picking up the SAME as target */
-	if (chan->name != target->name && chan != target) {
+	if (chan != target) {
 		res = pickup_do(chan, target);
-		ast_channel_unlock(target);
-	}
+	}
+
+	ast_channel_unref(target);
 
 	return res;
 }




More information about the svn-commits mailing list