[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