diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-04-17 16:48:47 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-04-17 16:48:47 +0000 |
commit | 9f73bdd388dd74512a00a0072b29e85722649157 (patch) | |
tree | 4480c9f10ea06c275ca5815cd8465c6713e73343 /main/frame.c | |
parent | 031da201bb6d063f89d3f099171b0b86c5eb9093 (diff) |
Merged revisions 114208 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r114208 | mmichelson | 2008-04-17 11:40:12 -0500 (Thu, 17 Apr 2008) | 20 lines
Merged revisions 114207 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r114207 | mmichelson | 2008-04-17 11:28:03 -0500 (Thu, 17 Apr 2008) | 12 lines
It was possible for a reference to a frame which was part of a freed DSP to still be
referenced, leading to memory corruption and eventual crashes. This code change ensures
that the dsp is freed when we are finished with the frame. This change is very similar
to a change Russell made with translators back a month or so ago.
(closes issue #11999)
Reported by: destiny6628
Patches:
11999.patch uploaded by putnopvut (license 60)
Tested by: destiny6628, victoryure
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@114210 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/frame.c')
-rw-r--r-- | main/frame.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/main/frame.c b/main/frame.c index 07ce936f2..dc471eebe 100644 --- a/main/frame.c +++ b/main/frame.c @@ -37,6 +37,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/threadstorage.h" #include "asterisk/linkedlists.h" #include "asterisk/translate.h" +#include "asterisk/dsp.h" #ifdef TRACE_FRAMES static int headers; @@ -308,6 +309,8 @@ void ast_frame_free(struct ast_frame *fr, int cache) { if (ast_test_flag(fr, AST_FRFLAG_FROM_TRANSLATOR)) ast_translate_frame_freed(fr); + else if (ast_test_flag(fr, AST_FRFLAG_FROM_DSP)) + ast_dsp_frame_freed(fr); if (!fr->mallocd) return; @@ -357,6 +360,7 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr) void *newdata; ast_clear_flag(fr, AST_FRFLAG_FROM_TRANSLATOR); + ast_clear_flag(fr, AST_FRFLAG_FROM_DSP); if (!(fr->mallocd & AST_MALLOCD_HDR)) { /* Allocate a new header if needed */ |