Commit f6fdbb88 authored by Ghislain MARY's avatar Ghislain MARY

Process ICE check lists in parallel (should prevent bug with pair that comes...

Process ICE check lists in parallel (should prevent bug with pair that comes back to the waiting state when it might already be successful).
parent f3651d2c
......@@ -2970,7 +2970,7 @@ static bool_t ice_session_contains_check_list(const IceSession *session, const I
return FALSE;
}
static void ice_continue_processing_on_next_check_list(IceCheckList *cl, RtpSession *rtp_session) {
static void ice_notify_session_processing_finished(IceCheckList *cl, RtpSession *rtp_session) {
IceCheckList *next_cl;
if (ice_session_contains_check_list(cl->session, cl) == FALSE) {
ms_error("ice: Could not find check list in the session");
......@@ -2990,9 +2990,6 @@ static void ice_continue_processing_on_next_check_list(IceCheckList *cl, RtpSess
cl->session->event_value = ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED;
cl->session->send_event = TRUE;
} else {
/* Activate the next check list. */
ice_compute_pairs_states(next_cl);
}
}
......@@ -3043,7 +3040,7 @@ static void ice_conclude_processing(IceCheckList *cl, RtpSession *rtp_session)
ev = ortp_event_new(ORTP_EVENT_ICE_CHECK_LIST_PROCESSING_FINISHED);
ortp_event_get_data(ev)->info.ice_processing_successful = TRUE;
rtp_session_dispatch_event(rtp_session, ev);
ice_continue_processing_on_next_check_list(cl, rtp_session);
ice_notify_session_processing_finished(cl, rtp_session);
}
} else {
cb.cl = cl;
......@@ -3058,7 +3055,7 @@ static void ice_conclude_processing(IceCheckList *cl, RtpSession *rtp_session)
ev = ortp_event_new(ORTP_EVENT_ICE_CHECK_LIST_PROCESSING_FINISHED);
ortp_event_get_data(ev)->info.ice_processing_successful = FALSE;
rtp_session_dispatch_event(rtp_session, ev);
ice_continue_processing_on_next_check_list(cl, rtp_session);
ice_notify_session_processing_finished(cl, rtp_session);
}
}
}
......@@ -3277,7 +3274,9 @@ void ice_check_list_process(IceCheckList *cl, RtpSession *rtp_session)
if (ice_check_list_send_triggered_check(cl, rtp_session) != NULL) return;
/* Send ordinary connectivity checks only when the check list is Running and active. */
if (!ice_check_list_is_frozen(cl)) {
if (ice_check_list_is_frozen(cl)) {
ice_compute_pairs_states(cl); /* Begin processing on this check list. */
} else {
/* Send an ordinary connectivity check for the pair in the Waiting state and with the highest priority if there is one. */
state = ICP_Waiting;
elem = ms_list_find_custom(cl->check_list, (MSCompareFunc)ice_find_pair_from_state, &state);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment