提交 4a56cc64 authored 作者: Anthony Minessale's avatar Anthony Minessale

FS-10146: [mod_conference] Completely setup conference member before adding them…

FS-10146: [mod_conference] Completely setup conference member before adding them to the conference #resolve
上级 2de52756
...@@ -684,12 +684,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -684,12 +684,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
switch_assert(conference != NULL); switch_assert(conference != NULL);
switch_assert(member != NULL); switch_assert(member != NULL);
switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->mutex);
switch_mutex_lock(member->audio_in_mutex);
switch_mutex_lock(member->audio_out_mutex);
lock_member(member);
switch_mutex_lock(conference->member_mutex);
if (member->rec) { if (member->rec) {
conference->recording_members++; conference->recording_members++;
...@@ -697,7 +692,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -697,7 +692,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
member->join_time = switch_epoch_time_now(NULL); member->join_time = switch_epoch_time_now(NULL);
member->conference = conference; member->conference = conference;
member->next = conference->members;
member->energy_level = conference->energy_level; member->energy_level = conference->energy_level;
member->auto_energy_level = conference->auto_energy_level; member->auto_energy_level = conference->auto_energy_level;
member->max_energy_level = conference->max_energy_level; member->max_energy_level = conference->max_energy_level;
...@@ -710,9 +704,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -710,9 +704,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
switch_queue_create(&member->dtmf_queue, 100, member->pool); switch_queue_create(&member->dtmf_queue, 100, member->pool);
conference->members = member;
conference_utils_member_set_flag_locked(member, MFLAG_INTREE); conference_utils_member_set_flag_locked(member, MFLAG_INTREE);
switch_mutex_unlock(conference->member_mutex);
conference_cdr_add(member); conference_cdr_add(member);
conference_api_set_agc(member, NULL); conference_api_set_agc(member, NULL);
...@@ -735,8 +727,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -735,8 +727,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
} }
} }
conference_send_presence(conference);
channel = switch_core_session_get_channel(member->session); channel = switch_core_session_get_channel(member->session);
if (switch_true(switch_channel_get_variable_dup(member->channel, "video_second_screen", SWITCH_FALSE, -1))) { if (switch_true(switch_channel_get_variable_dup(member->channel, "video_second_screen", SWITCH_FALSE, -1))) {
...@@ -961,10 +951,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -961,10 +951,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
} }
unlock_member(member);
switch_mutex_unlock(member->audio_out_mutex);
switch_mutex_unlock(member->audio_in_mutex);
if (conference->la && member->channel) { if (conference->la && member->channel) {
if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
cJSON *dvars; cJSON *dvars;
...@@ -1017,6 +1003,16 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -1017,6 +1003,16 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
} }
switch_mutex_lock(conference->member_mutex);
member->next = conference->members;
conference->members = member;
switch_mutex_unlock(conference->member_mutex);
switch_mutex_unlock(conference->mutex);
status = SWITCH_STATUS_SUCCESS;
conference_send_presence(conference);
if (conference_utils_test_flag(conference, CFLAG_POSITIONAL)) { if (conference_utils_test_flag(conference, CFLAG_POSITIONAL)) {
conference_al_gen_arc(conference, NULL); conference_al_gen_arc(conference, NULL);
...@@ -1026,8 +1022,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m ...@@ -1026,8 +1022,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
conference_event_send_rfc(conference); conference_event_send_rfc(conference);
conference_event_send_json(conference); conference_event_send_json(conference);
switch_mutex_unlock(conference->mutex);
status = SWITCH_STATUS_SUCCESS;
conference_video_find_floor(member, SWITCH_TRUE); conference_video_find_floor(member, SWITCH_TRUE);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论