]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix premature free'ing of the frame committed in r349608
authorMatthew Jordan <mjordan@digium.com>
Thu, 5 Jan 2012 23:56:52 +0000 (23:56 +0000)
committerMatthew Jordan <mjordan@digium.com>
Thu, 5 Jan 2012 23:56:52 +0000 (23:56 +0000)
Even though we set the frame to the ast_null_frame and return that,
the caller of the frame hook may still need the frame.  This now is
a bit more careful about when it frees the frame, i.e., only under
the same conditions that applied when we duplicated it in the first
place.

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

res/res_fax.c

index bc0eb18f8e224a3700704166fa52dd267f64c111..b9655db213d9ae759f96561ec034dcf0e61a4a91 100644 (file)
@@ -3058,7 +3058,11 @@ static struct ast_frame *fax_gateway_framehook(struct ast_channel *chan, struct
                 * write would fail, or even if a failure would be fatal so for
                 * now we'll just ignore the return value. */
                gateway->s->tech->write(gateway->s, f);
-               ast_frfree(f);
+               if ((f->frametype == AST_FRAME_VOICE) && (f->subclass.format.id != AST_FORMAT_SLINEAR) && active->readtrans) {
+                       /* Only free the frame if we translated / duplicated it - otherwise,
+                        * let whatever is outside the frame hook do it */
+                       ast_frfree(f);
+               }
                f = &ast_null_frame;
                ao2_ref(details, -1);
                return f;