diff options
author | Jakub Adam <jakub.adam@collabora.com> | 2019-02-21 15:54:06 +0100 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@ocrete.ca> | 2019-05-09 01:14:37 +0000 |
commit | f7319520977d13159da7bd99c7efc6f40c71944e (patch) | |
tree | 3d43882833b6aef9b8765802046d91006a152d8c | |
parent | c0321ff5bb04a2c8a8d2ec47780996e0180ac7fa (diff) | |
download | libnice-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.c | 29 |
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 |