[Asterisk-code-review] bridge_channel: Don't queue unmapped frames. (asterisk[16])

Friendly Automation asteriskteam at digium.com
Mon Jun 8 09:57:30 CDT 2020


Friendly Automation has submitted this change. ( https://gerrit.asterisk.org/c/asterisk/+/14503 )

Change subject: bridge_channel: Don't queue unmapped frames.
......................................................................

bridge_channel: Don't queue unmapped frames.

If a frame is written to a channel in a bridge we
would normally queue this frame up and the channel
thread would then act upon it. If this frame had no
stream mapping on the channel it would then be
discarded.

This change adds a check before the queueing occurs
to determine if a mapping exists. If it does not
exist then the frame is not even queued at all. This
stops a frame duplication from happening and from
the channel thread having to wake up and deal with
it.

Change-Id: I17189b9b1dec45fc7e4490e8081d444a25a00bda
---
M main/bridge_channel.c
1 file changed, 17 insertions(+), 0 deletions(-)

Approvals:
  Benjamin Keith Ford: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved
  Friendly Automation: Approved for Submit



diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index 8566187..251dea7 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -1043,6 +1043,23 @@
 		return 0;
 	}
 
+	if ((fr->frametype == AST_FRAME_VOICE || fr->frametype == AST_FRAME_VIDEO ||
+		fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_IMAGE ||
+		fr->frametype == AST_FRAME_RTCP) && fr->stream_num > -1) {
+		int num = -1;
+
+		ast_bridge_channel_lock(bridge_channel);
+		if (fr->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_channel)) {
+			num = AST_VECTOR_GET(&bridge_channel->stream_map.to_channel, fr->stream_num);
+		}
+		ast_bridge_channel_unlock(bridge_channel);
+
+		if (num == -1) {
+			/* We don't have a mapped stream so just discard this frame. */
+			return 0;
+		}
+	}
+
 	dup = ast_frdup(fr);
 	if (!dup) {
 		return -1;

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/14503
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-Change-Id: I17189b9b1dec45fc7e4490e8081d444a25a00bda
Gerrit-Change-Number: 14503
Gerrit-PatchSet: 3
Gerrit-Owner: Joshua Colp <jcolp at sangoma.com>
Gerrit-Reviewer: Benjamin Keith Ford <bford at digium.com>
Gerrit-Reviewer: Friendly Automation
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20200608/3d4c9a0d/attachment.html>


More information about the asterisk-code-review mailing list