[Freeswitch-svn] [commit] r13118 - freeswitch/trunk/src/mod/applications/mod_conference

FreeSWITCH SVN anthm at freeswitch.org
Wed Apr 22 11:06:34 PDT 2009


Author: anthm
Date: Wed Apr 22 13:06:34 2009
New Revision: 13118

Log:
finish up last commit

Modified:
   freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c

Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	Wed Apr 22 13:06:34 2009
@@ -3670,8 +3670,17 @@
 			channel = switch_core_session_get_channel(member->session);
 
 			if (!new_conference) {
-				switch_mutex_lock(globals.setup_mutex);
-				locked = 1;
+				if (!locked) {
+					switch_mutex_lock(globals.setup_mutex);
+					locked = 1;
+				}
+
+				if ((new_conference = conference_find(conf_name))) {
+					if (locked) {
+						switch_mutex_unlock(globals.setup_mutex);
+						locked = 0;
+					}
+				}
 
 				if (!(new_conference = conference_find(conf_name))) {
 					/* build a new conference if it doesn't exist */
@@ -3700,13 +3709,6 @@
 						xml_cfg.profile = switch_xml_find_child(profiles, "profile", "name", profile_name);
 					}
 
-					if (!xml_cfg.profile) {
-						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile: %s\n", profile_name);
-						switch_xml_free(cxml);
-						cxml = NULL;
-						goto done;
-					}
-
 					xml_cfg.controls = switch_xml_child(cfg, "caller-controls");
 
 					/* Release the config registry handle */
@@ -3726,8 +3728,10 @@
 						goto done;
 					}
 
-					switch_mutex_unlock(globals.setup_mutex);
-					locked = 0;
+					if (locked) {
+						switch_mutex_unlock(globals.setup_mutex);
+						locked = 0;
+					}
 
 					/* Set the minimum number of members (once you go above it you cannot go below it) */
 					new_conference->min = 1;
@@ -4715,8 +4719,10 @@
 	/* if this is a bridging call, and it's not a duplicate, build a */
 	/* conference object, and skip pin handling, and locked checking */
 
-	switch_mutex_lock(globals.setup_mutex);
-	locked = 1;
+	if (!locked) {
+		switch_mutex_lock(globals.setup_mutex);
+		locked = 1;
+	}
 
 	if (isbr) {
 		char *uuid = switch_core_session_get_uuid(session);
@@ -4737,8 +4743,10 @@
 			goto done;
 		}
 
-		switch_mutex_unlock(globals.setup_mutex);
-		locked = 0;
+		if (locked) {
+			switch_mutex_unlock(globals.setup_mutex);
+			locked = 0;
+		}
 
 		switch_channel_set_variable(channel, "conference_name", conference->name);
 
@@ -4759,8 +4767,15 @@
 			enforce_security = switch_true(pvar);
 		}
 
+		if ((conference = conference_find(conf_name))) {
+			if (locked) {
+				switch_mutex_unlock(globals.setup_mutex);
+				locked = 0;
+			}
+		}
+
 		/* if the conference exists, get the pointer to it */
-		if (!(conference = conference_find(conf_name))) {
+		if (!conference) {
 			/* couldn't find the conference, create one */
 			conference = conference_new(conf_name, xml_cfg, NULL);
 			
@@ -4768,8 +4783,10 @@
 				goto done;
 			}
 
-			switch_mutex_unlock(globals.setup_mutex);
-			locked = 0;
+			if (locked) {
+				switch_mutex_unlock(globals.setup_mutex);
+				locked = 0;
+			}
 
 			switch_channel_set_variable(channel, "conference_name", conference->name);
 



More information about the Freeswitch-svn mailing list