From: Anthony Minessale Date: Tue, 15 Aug 2006 22:19:38 +0000 (+0000) Subject: add proper shutdown to mod_conference X-Git-Tag: v1.0-beta1~2380 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0562e38a510fb37a149e5b239cb972d5fd1aed4d;p=thirdparty%2Ffreeswitch.git add proper shutdown to mod_conference git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2302 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 5e7ccb8b45..3f61c5a9d3 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -53,6 +53,8 @@ static struct { switch_mutex_t *id_mutex; switch_mutex_t *hash_mutex; uint32_t id_pool; + int32_t running; + uint32_t threads; } globals; struct conference_member; @@ -451,7 +453,9 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, v return NULL; } - while(!switch_test_flag(conference, CFLAG_DESTRUCT)) { + globals.threads++; + + while(globals.running && !switch_test_flag(conference, CFLAG_DESTRUCT)) { uint8_t file_frame[CONF_BUFFER_SIZE] = {0}; switch_size_t file_sample_len = samples; switch_size_t file_data_len = samples * 2; @@ -654,7 +658,8 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, v switch_core_destroy_memory_pool(&pool); } } - + + globals.threads--; return NULL; } @@ -2908,6 +2913,22 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod /* Release the config registry handle */ switch_xml_free(cxml); + globals.running = 1; /* indicate that the module should continue to be loaded */ return status; } + + +SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void) +{ + + + if (globals.running) { + globals.running = 0; + while (globals.threads) { + switch_yield(100000); + } + } + + return SWITCH_STATUS_SUCCESS; +}