[svn-commits] dvossel: branch dvossel/fixtheworld_phase1_step1 r299189 - in /team/dvossel/f...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Dec 20 20:32:18 UTC 2010


Author: dvossel
Date: Mon Dec 20 14:32:14 2010
New Revision: 299189

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=299189
Log:
Format API takes care of ending the va_lists used by the interface set functions

Modified:
    team/dvossel/fixtheworld_phase1_step1/include/asterisk/format.h
    team/dvossel/fixtheworld_phase1_step1/main/format.c
    team/dvossel/fixtheworld_phase1_step1/tests/test_format_api.c

Modified: team/dvossel/fixtheworld_phase1_step1/include/asterisk/format.h
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step1/include/asterisk/format.h?view=diff&rev=299189&r1=299188&r2=299189
==============================================================================
--- team/dvossel/fixtheworld_phase1_step1/include/asterisk/format.h (original)
+++ team/dvossel/fixtheworld_phase1_step1/include/asterisk/format.h Mon Dec 20 14:32:14 2010
@@ -152,7 +152,7 @@
     int (* const format_attr_get_joint)(struct ast_format_attr *fattr1, struct ast_format_attr *fattr2, struct ast_format_attr *result);
 
     /*! \brief Set format capabilities from a list of key value pairs ending with AST_FORMAT_ATTR_END.
-	 * \note This function is expected to call va_end(ap) after processing the va_list. */
+	 * \note This function does not need to call va_end of the va_list. */
     void (* const format_attr_set)(struct ast_format_attr *format_attr, va_list ap);
 };
 

Modified: team/dvossel/fixtheworld_phase1_step1/main/format.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step1/main/format.c?view=diff&rev=299189&r1=299188&r2=299189
==============================================================================
--- team/dvossel/fixtheworld_phase1_step1/main/format.c (original)
+++ team/dvossel/fixtheworld_phase1_step1/main/format.c Mon Dec 20 14:32:14 2010
@@ -87,13 +87,11 @@
 	};
 
 	if (!interfaces) {
-		va_end(ap);
 		return -1;
 	}
 
 	ast_rwlock_rdlock(&ilock);
 	if (!(wrapper = ao2_find(interfaces, &tmp_wrapper, (OBJ_POINTER | OBJ_NOLOCK)))) {
-		va_end(ap);
 		ast_log(LOG_WARNING, "Could not find format interface to set\n");
 		ast_rwlock_unlock(&ilock);
 		return -1;
@@ -104,11 +102,9 @@
 	if (!wrapper->interface || !wrapper->interface->format_attr_set) {
 		ast_rwlock_unlock(&wrapper->wraplock);
 		ao2_ref(wrapper, -1);
-		va_end(ap);
-		return -1;
-	}
-
-	/* The interface is responsible for calling va_end() now. */
+		return -1;
+	}
+
 	wrapper->interface->format_attr_set(&format->fattr, ap);
 
 	ast_rwlock_unlock(&wrapper->wraplock);
@@ -128,6 +124,7 @@
 		va_list ap;
 		va_start(ap, set_attributes);
 		format_set_helper(format, ap);
+		va_end(ap);
 	}
 
 	return format;
@@ -149,13 +146,11 @@
 	};
 
 	if (!interfaces) {
-		va_end(ap);
 		return -1;
 	}
 
 	ast_rwlock_rdlock(&ilock);
 	if (!(wrapper = ao2_find(interfaces, &tmp_wrapper, (OBJ_POINTER | OBJ_NOLOCK)))) {
-		va_end(ap);
 		ast_rwlock_unlock(&ilock);
 		return -1;
 	}
@@ -168,11 +163,9 @@
 
 		ast_rwlock_unlock(&wrapper->wraplock);
 		ao2_ref(wrapper, -1);
-		va_end(ap);
-		return -1;
-	}
-
-	/* The interface is responsible for calling va_end() now. */
+		return -1;
+	}
+
 	wrapper->interface->format_attr_set(&tmp.fattr, ap);
 
 	/* use our tmp structure to tell if the attributes are set or not */
@@ -187,9 +180,12 @@
 int ast_format_isset(struct ast_format *format, ... )
 {
 	va_list ap;
+	int res;
+
 	va_start(ap, format);
-
-	return format_isset_helper(format, ap);
+	res = format_isset_helper(format, ap);
+	va_end(ap);
+	return res;
 }
 
 

Modified: team/dvossel/fixtheworld_phase1_step1/tests/test_format_api.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step1/tests/test_format_api.c?view=diff&rev=299189&r1=299188&r2=299189
==============================================================================
--- team/dvossel/fixtheworld_phase1_step1/tests/test_format_api.c (original)
+++ team/dvossel/fixtheworld_phase1_step1/tests/test_format_api.c Mon Dec 20 14:32:14 2010
@@ -122,7 +122,6 @@
 			ast_log(LOG_WARNING, "unknown attribute type %d\n", key);
 		}
 	}
-	va_end(ap);
 }
 
 /*! uLaw does not actually have any attributes associated with it.




More information about the svn-commits mailing list