From e4ee2274a12d0f6c695f694946398ca1974da0d4 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Thu, 31 Jan 2008 23:10:06 +0000 Subject: [PATCH] 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/branches/1.4@101601 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/file.c | 1 + main/translate.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/main/file.c b/main/file.c index 332f284414..15cf7fadd2 100644 --- a/main/file.c +++ b/main/file.c @@ -205,6 +205,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 diff --git a/main/translate.c b/main/translate.c index 9f8219b12d..0aa21df122 100644 --- a/main/translate.c +++ b/main/translate.c @@ -355,6 +355,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)