]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 182171 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Mon, 16 Mar 2009 14:00:21 +0000 (14:00 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 16 Mar 2009 14:00:21 +0000 (14:00 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r182171 | file | 2009-03-16 10:58:24 -0300 (Mon, 16 Mar 2009) | 7 lines

  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/branches/1.6.1@182173 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index bf5006de5f9dab07b87561ef5193cc955423d6ca..830f4b1b413be1e8487aeb351a3833526d6a7dfa 100644 (file)
@@ -1730,14 +1730,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;