]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Message.c: Clear message channel frames on cleanup 85/1185/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:14 +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 bb98e24d992dacdb7e4f8bd0e3aee5edf0c1a9f4..a324d84945bd468f1649ffc338007579e122c737 100644 (file)
@@ -720,6 +720,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);
 
@@ -748,6 +749,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.
         */