[asterisk-commits] rmudgett: branch group/media_formats-reviewed-trunk r418418 - in /team/group/...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Jul 11 17:46:16 CDT 2014
Author: rmudgett
Date: Fri Jul 11 17:46:10 2014
New Revision: 418418
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418418
Log:
translate.c: Fix ref leaks in ast_translator_best_choice().
* Fixed ref leaks of bestdst and joint_cap in
ast_translator_best_choice().
* Added BUGBUG notes in format.c about objects allocated with locks that
don't need them.
* Fixed a couple doxygen comments in format.h.
Review: https://reviewboard.asterisk.org/r/3748/
Modified:
team/group/media_formats-reviewed-trunk/include/asterisk/format.h
team/group/media_formats-reviewed-trunk/main/format.c
team/group/media_formats-reviewed-trunk/main/translate.c
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/format.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/format.h?view=diff&rev=418418&r1=418417&r2=418418
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/format.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/format.h Fri Jul 11 17:46:10 2014
@@ -48,7 +48,7 @@
*/
void (*const format_destroy)(struct ast_format *format);
- /**
+ /*!
* \brief Callback for when the format is cloned, used to clone attributes
*
* \param src Source format of attributes
@@ -97,7 +97,7 @@
struct ast_format *(* const format_attribute_set)(const struct ast_format *format,
const char *name, const char *value);
- /*
+ /*!
* \brief Parse SDP attribute information, interpret it, and store it in the format structure.
*
* \param format Format to set attributes on
Modified: team/group/media_formats-reviewed-trunk/main/format.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/main/format.c?view=diff&rev=418418&r1=418417&r2=418418
==============================================================================
--- team/group/media_formats-reviewed-trunk/main/format.c (original)
+++ team/group/media_formats-reviewed-trunk/main/format.c Fri Jul 11 17:46:10 2014
@@ -148,7 +148,7 @@
return -1;
}
- format_interface = ao2_alloc(sizeof(*format_interface) + strlen(codec) + 1, NULL);
+ format_interface = ao2_alloc(sizeof(*format_interface) + strlen(codec) + 1, NULL);/* BUGBUG this doesn't need a lock. */
if (!format_interface) {
return -1;
}
@@ -190,7 +190,7 @@
struct ast_format *format;
struct format_interface *format_interface;
- format = ao2_alloc(sizeof(*format), format_destroy);
+ format = ao2_alloc(sizeof(*format), format_destroy);/* BUGBUG this doesn't need a lock. */
if (!format) {
return NULL;
}
Modified: team/group/media_formats-reviewed-trunk/main/translate.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/main/translate.c?view=diff&rev=418418&r1=418417&r2=418418
==============================================================================
--- team/group/media_formats-reviewed-trunk/main/translate.c (original)
+++ team/group/media_formats-reviewed-trunk/main/translate.c Fri Jul 11 17:46:10 2014
@@ -1262,18 +1262,13 @@
struct ast_format **dst_fmt_out,
struct ast_format **src_fmt_out)
{
- /*
- * BUGBUG:
- * This procedure was directly copied from main/translate.c in the
- * media_formats-reviewed (based on /branches/12). It compiles but
- * should be double-checked.
- */
unsigned int besttablecost = INT_MAX;
unsigned int beststeps = INT_MAX;
- struct ast_format *best = NULL;
- struct ast_format *bestdst = NULL;
- struct ast_format_cap *joint_cap;
- int i, j;
+ RAII_VAR(struct ast_format *, best, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_format *, bestdst, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_format_cap *, joint_cap, NULL, ao2_cleanup);
+ int i;
+ int j;
if (!(joint_cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
return -1;
@@ -1304,8 +1299,6 @@
if (best) {
ao2_replace(*dst_fmt_out, best);
ao2_replace(*src_fmt_out, best);
- ao2_ref(best, -1);
- ao2_ref(joint_cap, -1);
return 0;
}
/* need to translate */
@@ -1354,16 +1347,8 @@
if (!best) {
return -1;
}
- /* BUGBUG:
- * What if *dst_fmt_out / *src_fmt_out are already holding refs
- * We need to audit callers, I beleive I've seen leaks from
- * ast_translator_best_choice but ao2_replace causes undefined variable
- * access (reported by valgrind).
- */
ao2_replace(*dst_fmt_out, bestdst);
ao2_replace(*src_fmt_out, best);
- ao2_ref(best, -1);
- ao2_ref(bestdst, -1);
return 0;
}
More information about the asterisk-commits
mailing list