Close logging stuff so system doesn't have to (bug #1855)
authorMark Spencer <markster@digium.com>
Thu, 17 Jun 2004 01:13:10 +0000 (01:13 +0000)
committerMark Spencer <markster@digium.com>
Thu, 17 Jun 2004 01:13:10 +0000 (01:13 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3230 65c4cc65-6c06-0410-ace0-fbb531ad65f3

asterisk.c
asterisk.h
logger.c

index d20f0aa..d3fbe52 100755 (executable)
@@ -585,6 +585,10 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
                if (option_verbose || option_console)
                        ast_verbose("Restarting Asterisk NOW...\n");
                restartnow = 1;
+
+               /* close logger */
+               close_logger();
+
                /* If there is a consolethread running send it a SIGHUP 
                   so it can execvp, otherwise we can do it ourselves */
                if (consolethread != AST_PTHREADT_NULL) {
@@ -594,6 +598,9 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
                } else
                        execvp(_argv[0], _argv);
        
+       } else {
+               /* close logger */
+               close_logger();
        }
        exit(0);
 }
index d221f2f..1ceb13c 100755 (executable)
@@ -40,6 +40,7 @@ extern int load_modules(void);
 extern int load_pbx(void);
 /* Provided by logger.c */
 extern int init_logger(void);
+extern void close_logger(void);
 /* Provided by frame.c */
 extern int init_framer(void);
 /* Provided by logger.c */
index 840bbf2..9ba890b 100755 (executable)
--- a/logger.c
+++ b/logger.c
@@ -428,6 +428,25 @@ int init_logger(void)
        return -1;
 }
 
+void close_logger(void)
+{
+       struct msglist *m, *tmp;
+
+       m = list;
+       ast_mutex_lock(&msglist_lock);
+       while(m) {
+               if (m->msg) {
+                       free(m->msg);
+               }
+               tmp = m->next;
+               free(m);
+               m = tmp;
+       }
+       list = last = NULL;
+       ast_mutex_unlock(&msglist_lock);
+       return;
+}
+
 static void ast_log_vsyslog(int level, const char *file, int line, const char *function, const char *fmt, va_list args) {
     char buf[BUFSIZ];