diff --git a/main/channel.c b/main/channel.c
index 5b58b76bd73aa5b177bc57dae9d6128408124b2b..48eedafe7617050f14248ab41c339df854f09779 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -1084,6 +1084,7 @@ static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, in
 	for (cur = fin; cur; cur = AST_LIST_NEXT(cur, frame_list)) {
 		if (!(f = ast_frdup(cur))) {
 			ast_frfree(AST_LIST_FIRST(&frames));
+			ast_channel_unlock(chan);
 			return -1;
 		}