]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9307: [mod_conference] don't close files until after video threads are done to...
authorMichael Jerris <mike@jerris.com>
Tue, 28 Jun 2016 19:02:02 +0000 (14:02 -0500)
committerMichael Jerris <mike@jerris.com>
Tue, 28 Jun 2016 19:02:02 +0000 (14:02 -0500)
src/mod/applications/mod_conference/mod_conference.c

index 36bd064536c6b02d925e33eefb300e78586cb42c..21b10777662ce602bf39081744802d6a49d80c70 100644 (file)
@@ -691,35 +691,6 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
                }
        }
 
-
-       /* 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_lock(conference->member_mutex);
        for (imember = conference->members; imember; imember = imember->next) {
                switch_channel_t *channel;
@@ -768,7 +739,6 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
        }
        switch_mutex_unlock(conference_globals.hash_mutex);
 
-
        conference_utils_clear_flag(conference, CFLAG_VIDEO_MUXING);
 
        for (x = 0; x <= conference->canvas_count; x++) {
@@ -779,6 +749,34 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
                }
        }
 
+       /* 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);
+       }
+
        /* Wait till everybody is out */
        conference_utils_clear_flag_locked(conference, CFLAG_RUNNING);
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write Lock ON\n");