]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix MODAPP-22
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 25 Oct 2007 21:02:31 +0000 (21:02 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 25 Oct 2007 21:02:31 +0000 (21:02 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6058 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_conference/mod_conference.c

index b8215a84ff44585ea403c7d736c58b1bda5a7a42..80d5b5a4bd7d5ce0419a1c2a0c2fc9307dd7c193 100644 (file)
@@ -491,8 +491,9 @@ static switch_status_t conference_add_member(conference_obj_t * conference, conf
        switch_mutex_lock(member->audio_in_mutex);
        switch_mutex_lock(member->audio_out_mutex);
        switch_mutex_lock(member->flag_mutex);
-
        switch_mutex_lock(conference->member_mutex);
+
+       switch_clear_flag(conference, CFLAG_DESTRUCT);
        member->conference = conference;
        member->next = conference->members;
        member->energy_level = conference->energy_level;
@@ -4149,7 +4150,7 @@ SWITCH_STANDARD_APP(conference_function)
                                goto done;
                        }
                }
-
+               
                if (conference->special_announce) {
                        conference_local_play_file(conference, session, conference->special_announce, CONF_DEFAULT_LEADIN);
                }
@@ -4326,6 +4327,14 @@ SWITCH_STANDARD_APP(conference_function)
        switch_buffer_destroy(&member.audio_buffer);
        switch_buffer_destroy(&member.mux_buffer);
 
+       if (conference) {
+               switch_mutex_lock(conference->mutex);
+               if (switch_test_flag(conference, CFLAG_DYNAMIC) && conference->count == 0) {
+                       switch_set_flag_locked(conference, CFLAG_DESTRUCT);
+               }
+               switch_mutex_unlock(conference->mutex);
+       }
+
        /* Release the config registry handle */
        if (cxml) {
                switch_xml_free(cxml);