[Freeswitch-svn] [commit] r11656 - in freeswitch/trunk/src: . mod/endpoints/mod_sofia

FreeSWITCH SVN anthm at freeswitch.org
Thu Feb 5 09:14:12 PST 2009


Author: anthm
Date: Thu Feb  5 11:14:12 2009
New Revision: 11656

Log:
tweak sofia profile shutdown

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/trunk/src/switch_core_session.c

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Thu Feb  5 11:14:12 2009
@@ -692,7 +692,7 @@
 	int use_100rel = !sofia_test_pflag(profile, PFLAG_DISABLE_100REL);
 	int use_timer = !sofia_test_pflag(profile, PFLAG_DISABLE_TIMER);
 	const char *supported = NULL;
-	int sanity = 4;
+	int sanity;
 
 	switch_mutex_lock(mod_sofia_globals.mutex);
 	mod_sofia_globals.threads++;
@@ -831,9 +831,15 @@
 	sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
 
 	switch_core_session_hupall_matching_var("sofia_profile_name", profile->name, SWITCH_CAUSE_MANAGER_REQUEST);
+	sanity = 10;
 	while (profile->inuse) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Waiting for %d session(s)\n", profile->inuse);
 		su_root_step(profile->s_root, 1000);
+		if (!--sanity) {
+			break;
+		} else if (sanity == 5) {
+			switch_core_session_hupall_matching_var("sofia_profile_name", profile->name, SWITCH_CAUSE_MANAGER_REQUEST);
+		}
 	}
 
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write lock %s\n", profile->name);
@@ -841,6 +847,8 @@
 	sofia_reg_unregister(profile);
 	nua_shutdown(profile->nua);
 	su_root_run(profile->s_root);
+	nua_shutdown(profile->nua);
+	su_root_run(profile->s_root);
 
 	sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Waiting for worker thread\n");
@@ -848,16 +856,18 @@
 	while (sofia_test_pflag(profile, PFLAG_WORKER_RUNNING)) {
 		switch_yield(100000);
 	}
-
+	
+	sanity = 4;
 	while (profile->inuse) {
+		switch_core_session_hupall_matching_var("sofia_profile_name", profile->name, SWITCH_CAUSE_MANAGER_REQUEST);
 		switch_yield(5000000);
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Waiting for %d session(s)\n", profile->inuse);
-		if (!sanity--) {
+		if (!--sanity) {
 			break;
 		}
 	}
 	nua_destroy(profile->nua);
-
+	
 	switch_mutex_lock(profile->ireg_mutex);
 	switch_mutex_unlock(profile->ireg_mutex);
 

Modified: freeswitch/trunk/src/switch_core_session.c
==============================================================================
--- freeswitch/trunk/src/switch_core_session.c	(original)
+++ freeswitch/trunk/src/switch_core_session.c	Thu Feb  5 11:14:12 2009
@@ -142,8 +142,8 @@
 	switch_mutex_unlock(runtime.throttle_mutex);
 
 	while (session_manager.session_count > 0) {
-		switch_yield(100000);
-		if (++loops == 100) {
+		switch_yield(1000000);
+		if (++loops == 30) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Giving up with %d session%s remaining\n",
 							  session_manager.session_count, session_manager.session_count == 1 ? "" : "s");
 			break;



More information about the Freeswitch-svn mailing list