提交 d74b12a1 authored 作者: Anthony Minessale's avatar Anthony Minessale

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

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9997 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 f6f7f31c
...@@ -1633,7 +1633,7 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t ...@@ -1633,7 +1633,7 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t
} }
if (!strcasecmp(argv[1], "stop") || !strcasecmp(argv[1], "restart")) { if (!strcasecmp(argv[1], "stop") || !strcasecmp(argv[1], "restart")) {
int rsec = 3; int rsec = 10;
int diff = (int) (switch_timestamp(NULL) - profile->started); int diff = (int) (switch_timestamp(NULL) - profile->started);
int remain = rsec - diff; int remain = rsec - diff;
if (diff < rsec) { if (diff < rsec) {
......
...@@ -635,6 +635,14 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void ...@@ -635,6 +635,14 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
su_root_step(profile->s_root, 1000); 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_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write lock %s\n", profile->name);
switch_thread_rwlock_wrlock(profile->rwlock); switch_thread_rwlock_wrlock(profile->rwlock);
sofia_reg_unregister(profile); sofia_reg_unregister(profile);
......
...@@ -2708,6 +2708,19 @@ void sofia_glue_restart_all_profiles(void) ...@@ -2708,6 +2708,19 @@ void sofia_glue_restart_all_profiles(void)
for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) {
switch_hash_this(hi, &var, NULL, &val); switch_hash_this(hi, &var, NULL, &val);
if ((pptr = (sofia_profile_t *) 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_set_pflag_locked(pptr, PFLAG_RESPAWN);
sofia_clear_pflag_locked(pptr, PFLAG_RUNNING); sofia_clear_pflag_locked(pptr, PFLAG_RUNNING);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论