aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon
diff options
context:
space:
mode:
authorJan Hutter <jhutter@hsr.ch>2005-11-16 12:22:57 +0000
committerJan Hutter <jhutter@hsr.ch>2005-11-16 12:22:57 +0000
commitfe684f2a5e46bd145b080b995a3dcdae19962d5c (patch)
tree8d188172c63a4d4c216e12975ff6a5adb2eb2a9e /Source/charon
parentdb7154547e58b3240f24f593b52a69b31c4ffe40 (diff)
downloadstrongswan-fe684f2a5e46bd145b080b995a3dcdae19962d5c.tar.bz2
strongswan-fe684f2a5e46bd145b080b995a3dcdae19962d5c.tar.xz
- logger manager is destroyed at end
Diffstat (limited to 'Source/charon')
-rw-r--r--Source/charon/daemon.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/Source/charon/daemon.c b/Source/charon/daemon.c
index a36e9402b..a720a9c73 100644
--- a/Source/charon/daemon.c
+++ b/Source/charon/daemon.c
@@ -97,6 +97,23 @@ int main()
/* set signal handler */
register_signals();
+ /* logger_manager is created first */
+ global_logger_manager = logger_manager_create(ALL);
+ if (global_logger_manager == NULL)
+ {
+ printf("could not create logger manager");
+ return -1;
+ }
+
+ /* a own logger for the daemon is created */
+ logger = global_logger_manager->create_logger(global_logger_manager,DAEMON,NULL);
+ if (logger == NULL)
+ {
+ printf("could not create logger object");
+ destroy_globals();
+ return -1;
+ }
+
/* initialize all global objects */
if (initialize_globals() != SUCCESS)
{
@@ -200,15 +217,13 @@ static void register_signals()
static status_t initialize_globals()
{
/* initialize global object */
- global_logger_manager = logger_manager_create(ALL);
- global_socket = socket_create(4600);
+ global_socket = socket_create(4600);
+ global_ike_sa_manager = ike_sa_manager_create();
global_job_queue = job_queue_create();
global_event_queue = event_queue_create();
global_send_queue = send_queue_create();
- global_ike_sa_manager = ike_sa_manager_create();
- if ((global_logger_manager == NULL) ||
- (global_socket == NULL) ||
+ if ( (global_socket == NULL) ||
(global_job_queue == NULL) ||
(global_event_queue == NULL) ||
(global_send_queue == NULL) ||
@@ -241,10 +256,6 @@ static void destroy_globals()
{
global_socket->destroy(global_socket);
}
- if (global_logger_manager != NULL)
- {
- global_logger_manager->destroy(global_logger_manager);
- }
if (global_ike_sa_manager != NULL)
{
global_ike_sa_manager->destroy(global_ike_sa_manager);
@@ -291,22 +302,18 @@ static status_t start_threads()
*/
static void end_threads()
{
- logger->log(logger,CONTROL_MORE,"going to stop receiver thread");
if (receiver_thread != NULL)
{
receiver_thread->destroy(receiver_thread);
}
- logger->log(logger,CONTROL_MORE,"going to stop scheduler thread");
if (scheduler_thread != NULL)
{
scheduler_thread->destroy(scheduler_thread);
}
- logger->log(logger,CONTROL_MORE,"going to stop sender thread");
if (sender_thread != NULL)
{
sender_thread->destroy(sender_thread);
}
- logger->log(logger,CONTROL_MORE,"going to stop all worker threads");
if (thread_pool != NULL)
{
thread_pool->destroy(thread_pool);
@@ -324,13 +331,18 @@ static void destroy_and_exit(int exit_code)
logger->log(logger,CONTROL,"going to exit daemon");
end_threads();
-
- /* logger is destroyed */
- logger->log(logger,CONTROL_MORE,"destroy logger and afterwards all global objects -> No more log from here");
- global_logger_manager->destroy_logger(global_logger_manager,logger);
/* all globals can be destroyed now */
destroy_globals();
+
+ /* logger is destroyed */
+ logger->log(logger,CONTROL_MORE,"destroy logger");
+ global_logger_manager->destroy_logger(global_logger_manager,logger);
+ logger->log(logger,CONTROL_MORE,"destroy logger_manager");
+ if (global_logger_manager != NULL)
+ {
+ global_logger_manager->destroy(global_logger_manager);
+ }
#ifdef LEAK_DETECTIVE
/* Leaks are reported in log file */