]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 99081 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Fri, 18 Jan 2008 21:38:01 +0000 (21:38 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 18 Jan 2008 21:38:01 +0000 (21:38 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r99081 | russell | 2008-01-18 15:37:21 -0600 (Fri, 18 Jan 2008) | 9 lines

Revert adding the packed attribute, as it really doesn't make sense why that
would do any good.  Fix the real bug, which is to do the check to see if the
frame came from a translator at the beginning of ast_frame_free(), instead of
at the end.  This ensures that it always gets checked, even if none of the
parts of the frame are malloc'd, and also ensures that we aren't looking at
free'd memory in the case that it is a malloc'd frame.

(closes issue #11792, reported by explidous, patched by me)

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@99082 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/translate.h
main/frame.c

index f4673944c7579b57cac889b0e6f34799884cb1e5..97f10283f3f7643b4f82ebddad10804c66d35fae 100644 (file)
@@ -147,7 +147,7 @@ struct ast_trans_pvt {
        struct timeval nextin;
        struct timeval nextout;
        unsigned int destroy:1;
-} attribute_packed;
+};
 
 /*! \brief generic frameout function */
 struct ast_frame *ast_trans_frameout(struct ast_trans_pvt *pvt,
index d46dd239c2c60dc78c75b8d792b950612c9e04e2..3100636c53bae8db693f26fad827a4c1eceb8602 100644 (file)
@@ -321,6 +321,9 @@ static void frame_cache_cleanup(void *data)
 
 void ast_frame_free(struct ast_frame *fr, int cache)
 {
+       if (ast_test_flag(fr, AST_FRFLAG_FROM_TRANSLATOR))
+               ast_translate_frame_freed(fr);
+
        if (!fr->mallocd)
                return;
 
@@ -356,9 +359,6 @@ void ast_frame_free(struct ast_frame *fr, int cache)
 #endif                 
                ast_free(fr);
        }
-
-       if (ast_test_flag(fr, AST_FRFLAG_FROM_TRANSLATOR))
-               ast_translate_frame_freed(fr);
 }
 
 /*!