diff --git a/main/channel.c b/main/channel.c index 1c7743a2fff2232af243d039d4a8097e46d3e9b6..23491933650ba928d35ee1049e89d8c6cd6ce5f4 100644 --- a/main/channel.c +++ b/main/channel.c @@ -1148,6 +1148,9 @@ static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, in } AST_LIST_REMOVE_CURRENT(frame_list); ast_frfree(cur); + + /* Read from the alert pipe for each flushed frame. */ + ast_channel_internal_alert_read(chan); } } AST_LIST_TRAVERSE_SAFE_END; @@ -1164,9 +1167,13 @@ static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, in } if (ast_channel_alert_writable(chan)) { - if (ast_channel_alert_write(chan)) { - ast_log(LOG_WARNING, "Unable to write to alert pipe on %s (qlen = %u): %s!\n", - ast_channel_name(chan), queued_frames, strerror(errno)); + /* Write to the alert pipe for each added frame */ + while (new_frames--) { + if (ast_channel_alert_write(chan)) { + ast_log(LOG_WARNING, "Unable to write to alert pipe on %s (qlen = %u): %s!\n", + ast_channel_name(chan), queued_frames, strerror(errno)); + break; + } } } else if (ast_channel_timingfd(chan) > -1) { ast_timer_enable_continuous(ast_channel_timer(chan));