From 4c04e137830141d33dbaa7d709a103136cc91b5f Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Fri, 11 Aug 2017 17:02:07 -0500 Subject: [PATCH] bridge_softmix.c: Change remove_destination_streams() return meaning. The return value of remove_destination_streams() now means we removed a stream from the topology by making it a dead stream. Now we won't try to request a topology change if we didn't remove any streams. Change-Id: Icd91571d856a1d04299a24c411e325c1d9d5c61d --- bridges/bridge_softmix.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c index 8de88f257c..7385736dc4 100644 --- a/bridges/bridge_softmix.c +++ b/bridges/bridge_softmix.c @@ -697,10 +697,11 @@ static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chan return 0; } -static void remove_destination_streams(struct ast_stream_topology *topology, +static int remove_destination_streams(struct ast_stream_topology *topology, const char *channel_name) { int i; + int stream_removed = 0; for (i = 0; i < ast_stream_topology_get_count(topology); ++i) { struct ast_stream *stream; @@ -709,8 +710,10 @@ static void remove_destination_streams(struct ast_stream_topology *topology, if (is_video_dest(stream, channel_name, NULL)) { ast_stream_set_state(stream, AST_STREAM_STATE_REMOVED); + stream_removed = 1; } } + return stream_removed; } static int sfu_topologies_on_leave(struct ast_bridge_channel *leaver, struct ast_bridge_channels_list *participants) @@ -720,13 +723,16 @@ static int sfu_topologies_on_leave(struct ast_bridge_channel *leaver, struct ast AST_LIST_TRAVERSE(participants, participant, entry) { sc = participant->tech_pvt; - remove_destination_streams(sc->topology, ast_channel_name(leaver->chan)); + if (!remove_destination_streams(sc->topology, ast_channel_name(leaver->chan))) { + continue; + } ast_channel_request_stream_topology_change(participant->chan, sc->topology, NULL); } sc = leaver->tech_pvt; - remove_destination_streams(sc->topology, ""); - ast_channel_request_stream_topology_change(leaver->chan, sc->topology, NULL); + if (remove_destination_streams(sc->topology, "")) { + ast_channel_request_stream_topology_change(leaver->chan, sc->topology, NULL); + } return 0; }