diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index e25d2b8c7c..87daf4a0c0 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -953,7 +953,11 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t if (!strcasecmp(argv[1], "stop")) { sofia_clear_pflag_locked(profile, PFLAG_RUNNING); stream->write_function(stream, "stopping: %s", profile->name); - } + } else if (!strcasecmp(argv[1], "restart")) { + sofia_set_pflag_locked(profile, PFLAG_RESPAWN); + sofia_clear_pflag_locked(profile, PFLAG_RUNNING); + stream->write_function(stream, "restarting: %s", profile->name); + } if (profile) { switch_thread_rwlock_unlock(profile->rwlock); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index c42c5f83e4..d4b2ec4e4a 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -110,7 +110,8 @@ typedef enum { PFLAG_PASS_RFC2833 = (1 << 5), PFLAG_DISABLE_TRANSCODING = (1 << 6), PFLAG_REWRITE_TIMESTAMPS = (1 << 7), - PFLAG_RUNNING = (1 << 8) + PFLAG_RUNNING = (1 << 8), + PFLAG_RESPAWN = (1 << 9) } PFLAGS; typedef enum { diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index cb5533fbd6..90ed89433e 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -252,7 +252,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void uint32_t ireg_loops = 0; uint32_t gateway_loops = 0; switch_event_t *s_event; - + switch_mutex_lock(mod_sofia_globals.mutex); mod_sofia_globals.threads++; switch_mutex_unlock(mod_sofia_globals.mutex); @@ -384,6 +384,10 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void sofia_glue_del_profile(profile); switch_thread_rwlock_unlock(profile->rwlock); + + if (sofia_test_pflag(profile, PFLAG_RESPAWN)) { + config_sofia(1, profile->name); + } switch_core_destroy_memory_pool(&pool); @@ -869,6 +873,7 @@ switch_status_t config_sofia(int reload, char *profile_name) parse_gateways(profile, gateways_tag); } } + switch_xml_free(droot); } } sofia_glue_add_profile(switch_core_strdup(profile->pool, dname), profile);