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);
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 {
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);
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);
parse_gateways(profile, gateways_tag);
}
}
+ switch_xml_free(droot);
}
}
sofia_glue_add_profile(switch_core_strdup(profile->pool, dname), profile);