[Freeswitch-svn] [commit] r9997 - freeswitch/trunk/src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Mon Oct 13 15:26:29 EDT 2008


Author: anthm
Date: Mon Oct 13 15:26:28 2008
New Revision: 9997

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

Log:
add more profile shutdown code to compensate for bug in sofia lib on nua_destroy

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Mon Oct 13 15:26:28 2008
@@ -1633,7 +1633,7 @@
 	}
 
 	if (!strcasecmp(argv[1], "stop") || !strcasecmp(argv[1], "restart")) {
-		int rsec = 3;
+		int rsec = 10;
 		int diff = (int) (switch_timestamp(NULL) - profile->started);
 		int remain = rsec - diff;
 		if (diff < rsec) {

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	Mon Oct 13 15:26:28 2008
@@ -635,6 +635,14 @@
 		su_root_step(profile->s_root, 1000);
 	}
 
+	sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
+
+	switch_core_session_hupall_matching_var("sofia_profile_name", profile->name, SWITCH_CAUSE_MANAGER_REQUEST);
+	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);
+	}
+
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write lock %s\n", profile->name);
 	switch_thread_rwlock_wrlock(profile->rwlock);
 	sofia_reg_unregister(profile);

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	Mon Oct 13 15:26:28 2008
@@ -2708,6 +2708,19 @@
         for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) {
 			switch_hash_this(hi, &var, NULL, &val);
             if ((pptr = (sofia_profile_t *) val)) {
+				int rsec = 10;
+				int diff = (int) (switch_timestamp(NULL) - pptr->started);
+				int remain = rsec - diff;
+				if (sofia_test_pflag(pptr, PFLAG_RESPAWN) || !sofia_test_pflag(pptr, PFLAG_RUNNING)) {
+					continue;
+				}
+
+				if (diff < rsec) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+									  "Profile %s must be up for at least %d seconds to stop/restart.\nPlease wait %d second%s\n",
+									  pptr->name, rsec, remain, remain == 1 ? "" : "s");
+					continue;
+				}
 				sofia_set_pflag_locked(pptr, PFLAG_RESPAWN);
 				sofia_clear_pflag_locked(pptr, PFLAG_RUNNING);
 			}



More information about the Freeswitch-svn mailing list