summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2015-05-13 15:41:07 -0500
committerJonathan Rose <jrose@digium.com>2015-05-13 17:41:16 -0500
commit02c513058905dae19f28393ea840a47ae4a9e66d (patch)
treec5472d404b3e9769d6bb1c7b0077edb01676903f
parent51478575e4456b2e260ed2130094c1cd72dc549e (diff)
Message.c: Clear message channel frames on cleanup
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
-rw-r--r--main/message.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/main/message.c b/main/message.c
index 581487fcd..01a1c9b1c 100644
--- a/main/message.c
+++ b/main/message.c
@@ -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);
@@ -772,6 +773,13 @@ static void chan_cleanup(struct ast_channel *chan)
}
/*
+ * Remove frames from read queue
+ */
+ while ((cur = AST_LIST_REMOVE_HEAD(ast_channel_readq(chan), frame_list))) {
+ ast_frfree(cur);
+ }
+
+ /*
* Restore msg datastore.
*/
if (msg_ds) {