fix shutdown
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4930 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
110b476cc7
commit
98af688d7d
|
@ -1002,8 +1002,13 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod
|
||||||
switch_core_hash_init(&mod_sofia_globals.gateway_hash, module_pool);
|
switch_core_hash_init(&mod_sofia_globals.gateway_hash, module_pool);
|
||||||
switch_mutex_init(&mod_sofia_globals.hash_mutex, SWITCH_MUTEX_NESTED, module_pool);
|
switch_mutex_init(&mod_sofia_globals.hash_mutex, SWITCH_MUTEX_NESTED, module_pool);
|
||||||
|
|
||||||
config_sofia(0);
|
if (config_sofia(0) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
return SWITCH_STATUS_GENERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||||
|
mod_sofia_globals.running = 1;
|
||||||
|
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||||
|
|
||||||
if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
|
if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
|
||||||
!= SWITCH_STATUS_SUCCESS) {
|
!= SWITCH_STATUS_SUCCESS) {
|
||||||
|
@ -1045,17 +1050,21 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod
|
||||||
|
|
||||||
SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void)
|
SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void)
|
||||||
{
|
{
|
||||||
|
int sanity = 0;
|
||||||
|
|
||||||
sofia_presence_cancel();
|
sofia_presence_cancel();
|
||||||
|
|
||||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||||
if (mod_sofia_globals.running == 1) {
|
if (mod_sofia_globals.running == 1) {
|
||||||
mod_sofia_globals.running = -1;
|
mod_sofia_globals.running = 0;
|
||||||
}
|
}
|
||||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||||
|
|
||||||
while (mod_sofia_globals.running) {
|
while (mod_sofia_globals.threads) {
|
||||||
switch_yield(1000);
|
switch_yield(1000);
|
||||||
|
if (++sanity >= 5000) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
su_deinit();
|
su_deinit();
|
||||||
|
|
|
@ -146,6 +146,7 @@ struct mod_sofia_globals {
|
||||||
switch_mutex_t *hash_mutex;
|
switch_mutex_t *hash_mutex;
|
||||||
uint32_t callid;
|
uint32_t callid;
|
||||||
int32_t running;
|
int32_t running;
|
||||||
|
int32_t threads;
|
||||||
switch_mutex_t *mutex;
|
switch_mutex_t *mutex;
|
||||||
char guess_ip[80];
|
char guess_ip[80];
|
||||||
};
|
};
|
||||||
|
|
|
@ -240,6 +240,10 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
|
||||||
uint32_t gateway_loops = 0;
|
uint32_t gateway_loops = 0;
|
||||||
switch_event_t *s_event;
|
switch_event_t *s_event;
|
||||||
|
|
||||||
|
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||||
|
mod_sofia_globals.threads++;
|
||||||
|
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||||
|
|
||||||
profile->s_root = su_root_create(NULL);
|
profile->s_root = su_root_create(NULL);
|
||||||
profile->home = su_home_new(sizeof(*profile->home));
|
profile->home = su_home_new(sizeof(*profile->home));
|
||||||
|
|
||||||
|
@ -287,7 +291,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
|
||||||
|
|
||||||
if (!sofia_glue_init_sql(profile)) {
|
if (!sofia_glue_init_sql(profile)) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open SQL Database!\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open SQL Database!\n");
|
||||||
return NULL;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -350,8 +354,11 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
|
||||||
su_root_destroy(profile->s_root);
|
su_root_destroy(profile->s_root);
|
||||||
pool = profile->pool;
|
pool = profile->pool;
|
||||||
switch_core_destroy_memory_pool(&pool);
|
switch_core_destroy_memory_pool(&pool);
|
||||||
|
|
||||||
|
end:
|
||||||
|
|
||||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||||
mod_sofia_globals.running = 0;
|
mod_sofia_globals.threads--;
|
||||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -402,9 +409,7 @@ switch_status_t config_sofia(int reload)
|
||||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||||
sofia_profile_t *profile = NULL;
|
sofia_profile_t *profile = NULL;
|
||||||
char url[512] = "";
|
char url[512] = "";
|
||||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
|
||||||
mod_sofia_globals.running = 1;
|
|
||||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
|
||||||
|
|
||||||
if (!reload) {
|
if (!reload) {
|
||||||
su_init();
|
su_init();
|
||||||
|
|
Loading…
Reference in New Issue