提交 fa7f10c0 authored 作者: Anthony Minessale's avatar Anthony Minessale

FS-10079: [mod_conference] Possible lockup when sending many commands to…

FS-10079: [mod_conference] Possible lockup when sending many commands to conference at once #resolve
上级 0d0bc3bb
......@@ -160,11 +160,11 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
return SWITCH_STATUS_NOTFOUND;
}
switch_mutex_lock(conference->mutex);
switch_mutex_lock(conference->member_mutex);
count = conference->count;
switch_mutex_unlock(conference->member_mutex);
switch_mutex_unlock(conference->mutex);
if (!count) {
return SWITCH_STATUS_FALSE;
......@@ -316,7 +316,8 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
fnode->file = switch_core_strdup(fnode->pool, file);
if (!conference->fnode || (async && !conference->async_fnode)) {
conference_video_fnode_check(fnode, -1);
fnode->new_fnode = 1;
//conference_video_fnode_check(fnode, -1);
}
/* Queue the node */
......
......@@ -3123,7 +3123,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
switch_mutex_unlock(conference->member_mutex);
} else {
switch_mutex_lock(conference->file_mutex);
if (conference->async_fnode && (conference->async_fnode->canvas_id == canvas->canvas_id || conference->async_fnode->canvas_id == -1)) {
if (conference->async_fnode->layer_id > -1) {
conference_video_patch_fnode(canvas, conference->async_fnode);
......@@ -3139,6 +3139,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
conference_video_fnode_check(conference->fnode, canvas->canvas_id);
}
}
switch_mutex_unlock(conference->file_mutex);
if (!conference->playing_video_file) {
for (i = 0; i < canvas->total_layers; i++) {
......
......@@ -387,6 +387,7 @@ typedef struct conference_file_node {
struct conference_obj *conference;
char *res_id;
int loops;
int new_fnode;
} conference_file_node_t;
typedef enum {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论