From 993a6f96c7f6e07849af4a923ad3a0497ca854bd Mon Sep 17 00:00:00 2001 From: Matt Jordan Date: Mon, 14 Nov 2016 15:32:14 -0600 Subject: [PATCH] apps/app_echo: Only relay a single video source change frame In 9785e8d0, app_echo was updated to relay video source updates to the channel for the purposes of displaying video in WebRTC tests. Unfortunately, this can cause a Kafkaesque nightmare if two or more Local channels are in a bridge together where their ends are in app_echo. When this situation occurs, a video update sent into app_echo will cause the video update to be relayed to the other Local channels, causing another round of video updates, etc. In not much time at all, the channel length queues will be overwhelmed, channel alert pipes will fail, and all hell will break loose as Asterisk merrily continues to throw more video update requests onto the channels. This patch updates app_echo to *only* relay a single video update. Once a video update has been made, all further video updates are dropped. This meets the intended purpose of the original patch: if we get a video update and we're in app_echo, go ahead and ask the sender to update themselves. However, once we've got that video stream sync'd up, don't keep spamming the world. Change-Id: I9210780b08d4c17ddb38599d1c64453adfc34f74 --- apps/app_echo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/app_echo.c b/apps/app_echo.c index c6e37db57c..914607871b 100644 --- a/apps/app_echo.c +++ b/apps/app_echo.c @@ -68,7 +68,8 @@ static int echo_exec(struct ast_channel *chan, const char *data) f->delivery.tv_sec = 0; f->delivery.tv_usec = 0; if (f->frametype == AST_FRAME_CONTROL - && f->subclass.integer == AST_CONTROL_VIDUPDATE) { + && f->subclass.integer == AST_CONTROL_VIDUPDATE + && !fir_sent) { if (ast_write(chan, f) < 0) { ast_frfree(f); goto end;