From 06d3c61a2e0981cd05f7ff454129ffc1a325e2f8 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Fri, 18 Jan 2008 21:37:21 +0000 Subject: [PATCH] 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/branches/1.4@99081 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/translate.h | 2 +- main/frame.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h index 9437fa4e9a..a81d0072ac 100644 --- a/include/asterisk/translate.h +++ b/include/asterisk/translate.h @@ -149,7 +149,7 @@ struct ast_trans_pvt { struct ast_trans_pvt *next; /*!< next in translator chain */ struct timeval nextin; struct timeval nextout; -} attribute_packed; +}; /*! \brief generic frameout function */ struct ast_frame *ast_trans_frameout(struct ast_trans_pvt *pvt, diff --git a/main/frame.c b/main/frame.c index 9ac309fa31..1dafce9f84 100644 --- a/main/frame.c +++ b/main/frame.c @@ -334,6 +334,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; @@ -369,9 +372,6 @@ void ast_frame_free(struct ast_frame *fr, int cache) #endif free(fr); } - - if (ast_test_flag(fr, AST_FRFLAG_FROM_TRANSLATOR)) - ast_translate_frame_freed(fr); } /*!