}
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) {
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);
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);
}