diff --git a/main/channel.c b/main/channel.c
index 3d6fae64d335afc9be2c46de71a0d605bdce2044..e92eaf8bb29a0dec6ab844a50e67e43e84e8fbe0 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -10845,7 +10845,9 @@ static struct ast_frame *suppress_framehook_event_cb(struct ast_channel *chan, s
 	if (suppress_frame) {
 		switch (frame->frametype) {
 		case AST_FRAME_VOICE:
-			ast_frfree(frame);
+			if (event == AST_FRAMEHOOK_EVENT_READ) {
+				ast_frfree(frame);
+			}
 			frame = &ast_null_frame;
 			break;
 		default: