summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2009-03-16 13:58:24 +0000
committerJoshua Colp <jcolp@digium.com>2009-03-16 13:58:24 +0000
commit530811280601d439b18cccbefc44aa04f085d88c (patch)
tree640d9229b604a05df7de5b16673130ecb38a5822
parentb4fcc4a0981887ecfba44b0d3e7807ea9dc5eaf0 (diff)
Fix a memory leak in the ast_answer / __ast_answer API call.
For a channel that is not yet answered this API call will wait until a voice frame is received on the channel before returning. It does this by waiting for frames on the channel and reading them in. The frames read in were not freed when they should have been. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@182171 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--main/channel.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/main/channel.c b/main/channel.c
index 5a0994ea7..f4ab05f95 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -1755,14 +1755,19 @@ int __ast_answer(struct ast_channel *chan, unsigned int delay, int cdr_answer)
}
f = ast_read(chan);
if (!f || (f->frametype == AST_FRAME_CONTROL && f->subclass == AST_CONTROL_HANGUP)) {
+ if (f) {
+ ast_frfree(f);
+ }
res = -1;
ast_debug(2, "Hangup of channel %s detected in answer routine\n", chan->name);
break;
}
if (f->frametype == AST_FRAME_VOICE) {
+ ast_frfree(f);
res = 0;
break;
}
+ ast_frfree(f);
}
}
break;