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)
struct ast_datastore *msg_ds, *ds;
struct varshead *headp;
struct ast_var_t *vardata;
+ struct ast_frame *cur;
ast_channel_lock(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.
*/