aboutsummaryrefslogtreecommitdiffstats
path: root/main/frame.c
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-17 16:28:03 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-17 16:28:03 +0000
commit2fd6d65504ad48784a19ef212f370e61d59e2125 (patch)
treef12fa5e6d241ba8ea454c070b260a081e6e1c2a5 /main/frame.c
parent3f3aac1ad67aec3dc003bb7e4f7ad7183e7340a7 (diff)
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.4@114207 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/frame.c')
-rw-r--r--main/frame.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/main/frame.c b/main/frame.c
index 5c4613f4d..d2240efb0 100644
--- a/main/frame.c
+++ b/main/frame.c
@@ -321,6 +321,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;
@@ -370,6 +372,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 */