]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 101601 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Thu, 31 Jan 2008 23:14:57 +0000 (23:14 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 31 Jan 2008 23:14:57 +0000 (23:14 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r101601 | russell | 2008-01-31 17:10:06 -0600 (Thu, 31 Jan 2008) | 12 lines

Fix a couple of places where ast_frfree() was not called on a frame that came
from a translator.  This showed itself by g729 decoders not getting released.
Since the flag inside the translator frame never got unset by freeing the frame
to indicate it was no longer in use, the translators never got destroyed, and
thus the g729 licenses were not released.

(closes issue #11892)
Reported by: xrg
Patches:
      11892.diff uploaded by russell (license 2)
Tested by: xrg, russell

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@101611 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/file.c
main/translate.c

index daffb766d3ea51d64f8f1c381983c0e69ab5124d..6b37f160268b8550be6b0a1df15c27deaafc2d51 100644 (file)
@@ -188,6 +188,7 @@ int ast_writestream(struct ast_filestream *fs, struct ast_frame *f)
                        trf = ast_translate(fs->trans, f, 0);
                        if (trf) {
                                res = fs->fmt->write(fs, trf);
+                               ast_frfree(trf);
                                if (res) 
                                        ast_log(LOG_WARNING, "Translated frame write failed\n");
                        } else
index 1af88ecfb8bfa9ebff413b76939cf3f7c33ccf80..6de444ff501e7e21397f8d5d2ce8bf42b8257dbd 100644 (file)
@@ -347,6 +347,8 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
        delivery = f->delivery;
        for ( ; out && p ; p = p->next) {
                framein(p, out);
+               if (out != f)
+                       ast_frfree(out);
                out = p->t->frameout(p);
        }
        if (consume)