queue_log: Post QUEUESTART entry when Asterisk fully boots.
authorRichard Mudgett <rmudgett@digium.com>
Mon, 22 Dec 2014 20:08:35 +0000 (20:08 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Mon, 22 Dec 2014 20:08:35 +0000 (20:08 +0000)
The QUEUESTART log entry has historically acted like a fully booted event
for the queue_log file.  When the QUEUESTART entry was posted to the log
was broken by the change made by ASTERISK-15863.

* Made post the QUEUESTART queue_log entry when Asterisk fully boots.
This restores the intent of that log entry and happens after realtime has
had a chance to load.

AST-1444 #close
Reported by: Denis Martinez

Review: https://reviewboard.asterisk.org/r/4282/
........

Merged revisions 430009 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 430010 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430011 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/_private.h
main/asterisk.c
main/logger.c

index 5c80bf0..d49de17 100644 (file)
@@ -19,6 +19,7 @@ int load_modules(unsigned int);               /*!< Provided by loader.c */
 int load_pbx(void);                    /*!< Provided by pbx.c */
 int init_logger(void);                 /*!< Provided by logger.c */
 void close_logger(void);               /*!< Provided by logger.c */
+void logger_queue_start(void);         /*!< Provided by logger.c */
 void clean_time_zones(void);                   /*!< Provided by localtime.c */
 int ast_term_init(void);               /*!< Provided by term.c */
 int astdb_init(void);                  /*!< Provided by db.c */
index 0a5ab13..7378d22 100644 (file)
@@ -4592,6 +4592,8 @@ int main(int argc, char *argv[])
 
        ast_verb(0, COLORIZE_FMT "\n", COLORIZE(COLOR_BRGREEN, 0, "Asterisk Ready."));
 
+       logger_queue_start();
+
        if (ast_opt_console) {
                /* Console stuff now... */
                /* Register our quit function */
index 568a6d2..c59c7ce 100644 (file)
@@ -241,8 +241,6 @@ AST_THREADSTORAGE(verbose_build_buf);
 AST_THREADSTORAGE(log_buf);
 #define LOG_BUF_INIT_SIZE       256
 
-static void logger_queue_init(void);
-
 static void make_components(struct logchannel *chan)
 {
        char *w;
@@ -560,20 +558,8 @@ void ast_queue_log(const char *queuename, const char *callid, const char *agent,
                return;
        }
        if (!queuelog_init) {
-               AST_RWLIST_WRLOCK(&logchannels);
-               if (!queuelog_init) {
-                       /*
-                        * We have delayed initializing the queue logging system so
-                        * preloaded realtime modules can get up.  We must initialize
-                        * now since someone is trying to log something.
-                        */
-                       logger_queue_init();
-                       queuelog_init = 1;
-                       AST_RWLIST_UNLOCK(&logchannels);
-                       ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", "");
-               } else {
-                       AST_RWLIST_UNLOCK(&logchannels);
-               }
+               /* We must initialize now since someone is trying to log something. */
+               logger_queue_start();
        }
 
        if (ast_check_realtime("queue_log")) {
@@ -1397,6 +1383,30 @@ static void logger_queue_init(void)
        }
 }
 
+/*!
+ * \brief Start the ast_queue_log() logger.
+ *
+ * \note Called when the system is fully booted after startup
+ * so preloaded realtime modules can get up.
+ *
+ * \return Nothing
+ */
+void logger_queue_start(void)
+{
+       /* Must not be called before the logger is initialized. */
+       ast_assert(logger_initialized);
+
+       AST_RWLIST_WRLOCK(&logchannels);
+       if (!queuelog_init) {
+               logger_queue_init();
+               queuelog_init = 1;
+               AST_RWLIST_UNLOCK(&logchannels);
+               ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", "");
+       } else {
+               AST_RWLIST_UNLOCK(&logchannels);
+       }
+}
+
 int init_logger(void)
 {
        /* auto rotate if sig SIGXFSZ comes a-knockin */