summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Adam <jakub.adam@collabora.com>2019-02-21 15:54:06 +0100
committerOlivier CrĂȘte <olivier.crete@ocrete.ca>2019-05-09 01:14:37 +0000
commitf7319520977d13159da7bd99c7efc6f40c71944e (patch)
tree3d43882833b6aef9b8765802046d91006a152d8c
parentc0321ff5bb04a2c8a8d2ec47780996e0180ac7fa (diff)
downloadlibnice-f7319520977d13159da7bd99c7efc6f40c71944e.tar.gz
component: Refactor nice_component_clean_turn_servers()
First collect the relay candidates, then dispose them in a loop.
-rw-r--r--agent/component.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/agent/component.c b/agent/component.c
index cb1e979..7902097 100644
--- a/agent/component.c
+++ b/agent/component.c
@@ -212,6 +212,7 @@ void
nice_component_clean_turn_servers (NiceAgent *agent, NiceComponent *cmp)
{
GSList *i;
+ GSList *relay_candidates = NULL;
NiceStream *stream;
stream = agent_find_stream (agent, cmp->stream_id);
@@ -239,13 +240,7 @@ nice_component_clean_turn_servers (NiceAgent *agent, NiceComponent *cmp)
*/
if (candidate == cmp->selected_pair.local) {
if (cmp->turn_candidate) {
- refresh_prune_candidate (agent, cmp->turn_candidate);
- discovery_prune_socket (agent, cmp->turn_candidate->sockptr);
- if (stream)
- conn_check_prune_socket (agent, stream, cmp,
- cmp->turn_candidate->sockptr);
- nice_component_detach_socket (cmp, cmp->turn_candidate->sockptr);
- nice_candidate_free (cmp->turn_candidate);
+ relay_candidates = g_slist_append(relay_candidates, cmp->turn_candidate);
}
/* Bring the priority down to 0, so that it will be replaced
* on the new run.
@@ -253,18 +248,24 @@ nice_component_clean_turn_servers (NiceAgent *agent, NiceComponent *cmp)
cmp->selected_pair.priority = 0;
cmp->turn_candidate = candidate;
} else {
- refresh_prune_candidate (agent, candidate);
- discovery_prune_socket (agent, candidate->sockptr);
- if (stream)
- conn_check_prune_socket (agent, stream, cmp,
- candidate->sockptr);
- nice_component_detach_socket (cmp, candidate->sockptr);
agent_remove_local_candidate (agent, candidate);
- nice_candidate_free (candidate);
+ relay_candidates = g_slist_append(relay_candidates, candidate);
}
cmp->local_candidates = g_slist_delete_link (cmp->local_candidates, i);
i = next;
}
+
+ for (i = relay_candidates; i; i = i->next) {
+ NiceCandidate * candidate = i->data;
+
+ refresh_prune_candidate (agent, candidate);
+ discovery_prune_socket (agent, candidate->sockptr);
+ if (stream) {
+ conn_check_prune_socket (agent, stream, cmp, candidate->sockptr);
+ }
+ nice_component_detach_socket (cmp, candidate->sockptr);
+ nice_candidate_free (candidate);
+ }
}
static void