video_count = 0;
- switch_mutex_lock(conference->mutex);
+ switch_mutex_lock(conference->file_mutex);
if (conference->async_fnode && switch_core_file_has_video(&conference->async_fnode->fh, SWITCH_TRUE)) {
check_async_file = 1;
file_count++;
video_count++;
files_playing = 1;
}
- switch_mutex_unlock(conference->mutex);
+ switch_mutex_unlock(conference->file_mutex);
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
layout_applied = 0;
}
- switch_mutex_lock(conference->mutex);
+ switch_mutex_lock(conference->file_mutex);
if (check_async_file && conference->async_fnode) {
switch_status_t st = switch_core_file_read_video(&conference->async_fnode->fh, &file_frame, SVR_FLUSH);
j++;
}
}
- switch_mutex_unlock(conference->mutex);
+ switch_mutex_unlock(conference->file_mutex);
for (imember = conference->members; imember; imember = imember->next) {
int i = 0;
conference_video_canvas_del_fnode_layer(conference, conference->async_fnode);
}
+ switch_mutex_lock(conference->file_mutex);
conference_file_close(conference, conference->async_fnode);
pool = conference->async_fnode->pool;
conference->async_fnode = NULL;
switch_core_destroy_memory_pool(&pool);
+ switch_mutex_unlock(conference->file_mutex);
}
if (conference->fnode && conference->fnode->done) {
conference_file_node_t *fnode;
switch_memory_pool_t *pool;
+ switch_mutex_lock(conference->file_mutex);
if (conference->fnode->type != NODE_TYPE_SPEECH) {
conference_file_close(conference, conference->fnode);
}
conference_video_canvas_del_fnode_layer(conference, conference->fnode);
}
+
fnode = conference->fnode;
conference->fnode = conference->fnode->next;
pool = fnode->pool;
fnode = NULL;
switch_core_destroy_memory_pool(&pool);
+ switch_mutex_unlock(conference->file_mutex);
}
if (!conference->end_count && conference->endconference_time &&
}
}
- switch_mutex_lock(conference->mutex);
-
- /* Close Unused Handles */
- if (conference->fnode) {
- conference_file_node_t *fnode, *cur;
- switch_memory_pool_t *pool;
-
- fnode = conference->fnode;
- while (fnode) {
- cur = fnode;
- fnode = fnode->next;
-
- if (cur->type != NODE_TYPE_SPEECH) {
- conference_file_close(conference, cur);
- }
-
- pool = cur->pool;
- switch_core_destroy_memory_pool(&pool);
- }
- conference->fnode = NULL;
- }
-
- if (conference->async_fnode) {
- switch_memory_pool_t *pool;
- conference_file_close(conference, conference->async_fnode);
- pool = conference->async_fnode->pool;
- conference->async_fnode = NULL;
- switch_core_destroy_memory_pool(&pool);
- }
-
- switch_mutex_unlock(conference->mutex);
+ conference_close_open_files(conference);
/* Wait till everybody is out */
conference_utils_clear_flag_locked(conference, CFLAG_RUNNING);
/* Activate the conference mutex for exclusivity */
switch_mutex_init(&conference->mutex, SWITCH_MUTEX_NESTED, conference->pool);
switch_mutex_init(&conference->flag_mutex, SWITCH_MUTEX_NESTED, conference->pool);
+ switch_mutex_init(&conference->file_mutex, SWITCH_MUTEX_NESTED, conference->pool);
switch_thread_rwlock_create(&conference->rwlock, conference->pool);
switch_mutex_init(&conference->member_mutex, SWITCH_MUTEX_NESTED, conference->pool);
switch_mutex_init(&conference->canvas_mutex, SWITCH_MUTEX_NESTED, conference->pool);