diff --git a/main/message.c b/main/message.c
index 581487fcd70c820499fe6240c36b2c3f7f742780..01a1c9b1cd5f72344e5068621f148cc3abd90322 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);
 
@@ -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.
 	 */