forked from Mirrors/freeswitch
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_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)
|
||||
!= 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)
|
||||
{
|
||||
|
||||
int sanity = 0;
|
||||
|
||||
sofia_presence_cancel();
|
||||
|
||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||
if (mod_sofia_globals.running == 1) {
|
||||
mod_sofia_globals.running = -1;
|
||||
mod_sofia_globals.running = 0;
|
||||
}
|
||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||
|
||||
while (mod_sofia_globals.running) {
|
||||
while (mod_sofia_globals.threads) {
|
||||
switch_yield(1000);
|
||||
if (++sanity >= 5000) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
su_deinit();
|
||||
|
@ -146,6 +146,7 @@ struct mod_sofia_globals {
|
||||
switch_mutex_t *hash_mutex;
|
||||
uint32_t callid;
|
||||
int32_t running;
|
||||
int32_t threads;
|
||||
switch_mutex_t *mutex;
|
||||
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;
|
||||
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->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)) {
|
||||
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);
|
||||
pool = profile->pool;
|
||||
switch_core_destroy_memory_pool(&pool);
|
||||
|
||||
end:
|
||||
|
||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||
mod_sofia_globals.running = 0;
|
||||
mod_sofia_globals.threads--;
|
||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||
|
||||
return NULL;
|
||||
@ -402,9 +409,7 @@ switch_status_t config_sofia(int reload)
|
||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||
sofia_profile_t *profile = NULL;
|
||||
char url[512] = "";
|
||||
switch_mutex_lock(mod_sofia_globals.mutex);
|
||||
mod_sofia_globals.running = 1;
|
||||
switch_mutex_unlock(mod_sofia_globals.mutex);
|
||||
|
||||
|
||||
if (!reload) {
|
||||
su_init();
|
||||
|
Loading…
Reference in New Issue
Block a user