[svn-commits] eliel: branch group/data_api_gsoc2009 r210752 - /team/group/data_api_gsoc2009...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Aug 5 19:22:56 CDT 2009


Author: eliel
Date: Wed Aug  5 19:22:52 2009
New Revision: 210752

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=210752
Log:
Fix an issue in the filtering mechanism.


Modified:
    team/group/data_api_gsoc2009/main/data.c

Modified: team/group/data_api_gsoc2009/main/data.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/data_api_gsoc2009/main/data.c?view=diff&rev=210752&r1=210751&r2=210752
==============================================================================
--- team/group/data_api_gsoc2009/main/data.c (original)
+++ team/group/data_api_gsoc2009/main/data.c Wed Aug  5 19:22:52 2009
@@ -1648,11 +1648,11 @@
 	const struct ast_data_search *search,
 	const struct data_filter *filter)
 {
-	struct ast_data *generated = NULL, *node;
+	struct ast_data *generated, *node;
 	struct ao2_iterator i;
 	struct data_provider *provider;
 	struct ast_data_search *search_child = NULL;
-	struct data_filter *filter_child = NULL;
+	struct data_filter *filter_child;
 
 	node = data_result_create(parent_node_name);
 	if (!node) {
@@ -1666,15 +1666,9 @@
 
 	/* if this is a terminal node, just run the callback function. */
 	if (root_provider->handler && root_provider->handler->get) {
-		if (filter) {
-			filter_child = data_filter_find(filter->children, node->name);
-		}
-		node->filter = filter_child;
+		node->filter = filter;
 		root_provider->handler->get(search, node);
 		ast_module_unref(root_provider->module);
-		if (filter_child) {
-			ao2_ref(filter_child, -1);
-		}
 		return node;
 	}
 
@@ -1685,6 +1679,9 @@
 	/* if this is not a terminal node, generate every child node. */
 	i = ao2_iterator_init(root_provider->children, 0);
 	while ((provider = ao2_iterator_next(&i))) {
+		filter_child = NULL;
+		generated = NULL;
+
 		/* get the internal search node. */
 		if (search) {
 			search_child = data_search_find(search->children, provider->name);
@@ -1693,6 +1690,7 @@
 		if (filter) {
 			filter_child = data_filter_find(filter->children, provider->name);
 		}
+
 		if (!filter || filter_child) {
 			/* only generate the internal node, if we have something to
 			 * generate based on the filtering string. */
@@ -1700,6 +1698,7 @@
 				provider->name,
 				search_child, filter_child);
 		}
+
 		/* decrement the refcount of the internal search node. */
 		if (search_child) {
 			ao2_ref(search_child, -1);
@@ -1790,7 +1789,7 @@
 	}
 
 	result = data_result_generate_node(query, provider_child, provider_child->name,
-			search_child, filter);
+			search_child, filter_child);
 
 	/* release the requested provider. */
 	ao2_ref(provider_child, -1);




More information about the svn-commits mailing list