[Freeswitch-svn] [commit] r9353 - in freeswitch/trunk/src: . mod/loggers/mod_logfile
Freeswitch SVN
anthm at freeswitch.org
Fri Aug 22 13:57:15 EDT 2008
Author: anthm
Date: Fri Aug 22 13:57:15 2008
New Revision: 9353
Modified:
freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c
freeswitch/trunk/src/switch_event.c
freeswitch/trunk/src/switch_loadable_module.c
Log:
improve unload stuff
Modified: freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c
==============================================================================
--- freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c (original)
+++ freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c Fri Aug 22 13:57:15 2008
@@ -376,16 +376,30 @@
switch_log_bind_logger(mod_logfile_logger, SWITCH_LOG_DEBUG, SWITCH_FALSE);
- return SWITCH_STATUS_NOUNLOAD;
+ return SWITCH_STATUS_SUCCESS;
}
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_logfile_shutdown)
{
- /* TODO: Need to finish processing pending log messages before we close the file handle */
+ switch_hash_index_t *hi;
+ const void *var;
+ void *val;
- //switch_file_close(globals->log_afd);
+ switch_log_unbind_logger(mod_logfile_logger);
switch_event_unbind(&globals.node);
+ for (hi = switch_hash_first(NULL, profile_hash); hi; hi = switch_hash_next(hi)) {
+ logfile_profile_t *profile;
+ switch_hash_this(hi, &var, NULL, &val);
+ if ((profile = (logfile_profile_t *) val)) {
+ switch_file_close(profile->log_afd);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Closing %s\n", profile->logfile);
+ printf("WTF\n");
+ }
+ }
+
+
+
return SWITCH_STATUS_SUCCESS;
}
Modified: freeswitch/trunk/src/switch_event.c
==============================================================================
--- freeswitch/trunk/src/switch_event.c (original)
+++ freeswitch/trunk/src/switch_event.c Fri Aug 22 13:57:15 2008
@@ -445,7 +445,7 @@
for (hi = switch_hash_first(NULL, CUSTOM_HASH); hi; hi = switch_hash_next(hi)) {
switch_event_subclass_t *subclass;
- switch_hash_this(hi, &var, NULL, &val);;
+ switch_hash_this(hi, &var, NULL, &val);
if ((subclass = (switch_event_subclass_t *) val)) {
FREE(subclass->name);
FREE(subclass->owner);
Modified: freeswitch/trunk/src/switch_loadable_module.c
==============================================================================
--- freeswitch/trunk/src/switch_loadable_module.c (original)
+++ freeswitch/trunk/src/switch_loadable_module.c Fri Aug 22 13:57:15 2008
@@ -51,6 +51,7 @@
switch_module_runtime_t switch_module_runtime;
switch_module_shutdown_t switch_module_shutdown;
switch_memory_pool_t *pool;
+ switch_status_t status;
};
struct switch_loadable_module_container {
@@ -73,7 +74,7 @@
};
static struct switch_loadable_module_container loadable_modules;
-static void do_shutdown(switch_loadable_module_t *module);
+static void do_shutdown(switch_loadable_module_t *module, switch_bool_t shutdown, switch_bool_t unload);
static void *switch_loadable_module_exec(switch_thread_t *thread, void *obj)
{
@@ -867,7 +868,7 @@
status = SWITCH_STATUS_NOUNLOAD;
goto end;
} else {
- do_shutdown(module);
+ do_shutdown(module, SWITCH_TRUE, SWITCH_TRUE);
}
switch_core_hash_delete(loadable_modules.module_hash, fname);
} else {
@@ -1106,28 +1107,31 @@
return SWITCH_STATUS_SUCCESS;
}
-static void do_shutdown(switch_loadable_module_t *module)
+static void do_shutdown(switch_loadable_module_t *module, switch_bool_t shutdown, switch_bool_t unload)
{
switch_assert(module != NULL);
- switch_loadable_module_unprocess(module);
- if (module->switch_module_shutdown) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Stopping: %s\n", module->module_interface->module_name);
- if (module->switch_module_shutdown() == SWITCH_STATUS_UNLOAD) {
- switch_memory_pool_t *pool;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s unloaded.\n", module->module_interface->module_name);
- switch_dso_unload(module->lib);
- module->lib = NULL;
- if ((pool = module->pool)) {
- module = NULL;
- switch_core_destroy_memory_pool(&pool);
- }
+ if (shutdown) {
+ switch_loadable_module_unprocess(module);
+ if (module->switch_module_shutdown) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Stopping: %s\n", module->module_interface->module_name);
+ module->status = module->switch_module_shutdown();
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s shutdown.\n", module->module_interface->module_name);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s has no shutdown routine\n", module->module_interface->module_name);
+ }
+ }
+
+ if (unload && module->status != SWITCH_STATUS_NOUNLOAD) {
+ switch_memory_pool_t *pool;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s unloaded.\n", module->module_interface->module_name);
+ switch_dso_unload(module->lib);
+ module->lib = NULL;
+ if ((pool = module->pool)) {
+ module = NULL;
+ switch_core_destroy_memory_pool(&pool);
}
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s has no shutdown routine\n", module->module_interface->module_name);
}
+
}
SWITCH_DECLARE(void) switch_loadable_module_shutdown(void)
@@ -1139,7 +1143,17 @@
for (hi = switch_hash_first(NULL, loadable_modules.module_hash); hi; hi = switch_hash_next(hi)) {
switch_hash_this(hi, NULL, NULL, &val);
module = (switch_loadable_module_t *) val;
- do_shutdown(module);
+ if (!module->perm) {
+ do_shutdown(module, SWITCH_TRUE, SWITCH_FALSE);
+ }
+ }
+
+ for (hi = switch_hash_first(NULL, loadable_modules.module_hash); hi; hi = switch_hash_next(hi)) {
+ switch_hash_this(hi, NULL, NULL, &val);
+ module = (switch_loadable_module_t *) val;
+ if (!module->perm) {
+ do_shutdown(module, SWITCH_FALSE, SWITCH_TRUE);
+ }
}
switch_core_hash_destroy(&loadable_modules.module_hash);
More information about the Freeswitch-svn
mailing list