]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Message.c: Clear message channel frames on cleanup 86/1186/1
authorJonathan Rose <jrose@digium.com>
Wed, 13 May 2015 20:41:07 +0000 (15:41 -0500)
committerJonathan Rose <jrose@digium.com>
Fri, 4 Sep 2015 16:44:42 +0000 (11:44 -0500)
The message channel is a special channel that doesn't actually process frames.
However, certain actions can cause frames to be placed in the channel's read
queue including the Hangup application which is called on the channel after
each message is processed. Since the channel will continually be reused for
many messages, it's necessary to flush these frames at some point.

ASTERISK-25083 #close
Reported by: Jonathan Rose

Change-Id: Idf18df73ccd8c220be38743335b5c79c2a4c0d0f
(cherry picked from commit 02c513058905dae19f28393ea840a47ae4a9e66d)

main/message.c

index ff88c2f6da13947d85bad0eaf117711c85e99296..4100c0fdd63240b7c44186a53be5b482d191ca79 100644 (file)
@@ -743,6 +743,7 @@ static void chan_cleanup(struct ast_channel *chan)
        struct ast_datastore *msg_ds, *ds;
        struct varshead *headp;
        struct ast_var_t *vardata;
+       struct ast_frame *cur;
 
        ast_channel_lock(chan);
 
@@ -771,6 +772,13 @@ static void chan_cleanup(struct ast_channel *chan)
                ast_var_delete(vardata);
        }
 
+       /*
+        * Remove frames from read queue
+        */
+       while ((cur = AST_LIST_REMOVE_HEAD(ast_channel_readq(chan), frame_list))) {
+               ast_frfree(cur);
+       }
+
        /*
         * Restore msg datastore.
         */