From: Richard Mudgett Date: Fri, 11 Aug 2017 22:02:07 +0000 (-0500) Subject: bridge_softmix.c: Change remove_destination_streams() return meaning. X-Git-Tag: 15.2.0-rc1~13^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c18eebcc1113c2a9d6f19a125597e01355b23c5c;p=thirdparty%2Fasterisk.git 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 --- 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; }