FS-10079: [mod_conference] Possible lockup when sending many commands to conference at once #resolve
This commit is contained in:
parent
0d0bc3bbd4
commit
fa7f10c02b
|
@ -160,11 +160,11 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
|
||||||
return SWITCH_STATUS_NOTFOUND;
|
return SWITCH_STATUS_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_mutex_lock(conference->mutex);
|
|
||||||
switch_mutex_lock(conference->member_mutex);
|
switch_mutex_lock(conference->member_mutex);
|
||||||
count = conference->count;
|
count = conference->count;
|
||||||
switch_mutex_unlock(conference->member_mutex);
|
switch_mutex_unlock(conference->member_mutex);
|
||||||
switch_mutex_unlock(conference->mutex);
|
|
||||||
|
|
||||||
if (!count) {
|
if (!count) {
|
||||||
return SWITCH_STATUS_FALSE;
|
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);
|
fnode->file = switch_core_strdup(fnode->pool, file);
|
||||||
|
|
||||||
if (!conference->fnode || (async && !conference->async_fnode)) {
|
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 */
|
/* 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);
|
switch_mutex_unlock(conference->member_mutex);
|
||||||
} else {
|
} 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 && (conference->async_fnode->canvas_id == canvas->canvas_id || conference->async_fnode->canvas_id == -1)) {
|
||||||
if (conference->async_fnode->layer_id > -1) {
|
if (conference->async_fnode->layer_id > -1) {
|
||||||
conference_video_patch_fnode(canvas, conference->async_fnode);
|
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);
|
conference_video_fnode_check(conference->fnode, canvas->canvas_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
switch_mutex_unlock(conference->file_mutex);
|
||||||
|
|
||||||
if (!conference->playing_video_file) {
|
if (!conference->playing_video_file) {
|
||||||
for (i = 0; i < canvas->total_layers; i++) {
|
for (i = 0; i < canvas->total_layers; i++) {
|
||||||
|
|
|
@ -387,6 +387,7 @@ typedef struct conference_file_node {
|
||||||
struct conference_obj *conference;
|
struct conference_obj *conference;
|
||||||
char *res_id;
|
char *res_id;
|
||||||
int loops;
|
int loops;
|
||||||
|
int new_fnode;
|
||||||
} conference_file_node_t;
|
} conference_file_node_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
Loading…
Reference in New Issue