frame.c: Copy the whole subclass in ast_frdup().
authorJacek Konieczny <jkonieczny@eggsoft.pl>
Wed, 6 Apr 2016 13:01:47 +0000 (15:01 +0200)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 6 Apr 2016 16:10:49 +0000 (11:10 -0500)
The problem is ast_frdup() does not copy whole frame.subclass for voice,
video and image frames, only the format is copied.  For video frames, the
subclass structure contains the .frame_ending flag used to put the RTP
marker where it needs to be.

ASTERISK-25894 #close

Change-Id: I812ca90e84ed5d4f473b997d0dd0d3c5a915fe33

main/frame.c

index ae2120a..92b92b6 100644 (file)
@@ -320,11 +320,10 @@ struct ast_frame *ast_frdup(const struct ast_frame *f)
        }
 
        out->frametype = f->frametype;
+       out->subclass = f->subclass;
        if ((f->frametype == AST_FRAME_VOICE) || (f->frametype == AST_FRAME_VIDEO) ||
                (f->frametype == AST_FRAME_IMAGE)) {
-               out->subclass.format = ao2_bump(f->subclass.format);
-       } else {
-               memcpy(&out->subclass, &f->subclass, sizeof(out->subclass));
+               ao2_bump(out->subclass.format);
        }
        out->datalen = f->datalen;
        out->samples = f->samples;