This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5602

-- gerrit

commit 30eee7738468d25498d48d2a16077a36fc190254
Author: Antonio Borneo <[email protected]>
Date:   Fri Apr 24 00:28:49 2020 +0200

    log: handle LOG_*() before calling to log_init()
    
    There are cases where LOG_*() functions are called before the logs
    are initialized with log_init().
    E.g. in transport_register() that is executed in gcc constructors,
    thus called even before main().
    With debug_level set to LOG_LVL_USER=-1 all the LOG_ERROR() get
    dropped.
    Properly initializing debug_level cause segmentation fault due to
    log_output still not initialized.
    
    Initialize debug_level to LOG_LVL_INFO so errors get printed.
    Handle separately the case of log_output still NULL, meaning that
    log_init() is not called yet.
    
    Change-Id: I2ea32c87a4955fb44e79b38131c456e25dfbc327
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/helper/log.c b/src/helper/log.c
index ae26df5..e42e9fa 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -40,7 +40,7 @@
 #endif
 #endif
 
-int debug_level = -1;
+int debug_level = LOG_LVL_INFO;
 
 static FILE *log_output;
 static struct log_callback *log_callbacks;
@@ -91,6 +91,14 @@ static void log_puts(enum log_levels level,
        const char *string)
 {
        char *f;
+
+       if (!log_output) {
+               /* log_init() not called yet; print on stderr */
+               fputs(string, stderr);
+               fflush(stderr);
+               return;
+       }
+
        if (level == LOG_LVL_OUTPUT) {
                /* do not prepend any headers, just print out what we were 
given and return */
                fputs(string, log_output);
@@ -277,9 +285,6 @@ void log_init(void)
 {
        /* set defaults for daemon configuration,
         * if not set by cmdline or cfgfile */
-       if (debug_level == -1)
-               debug_level = LOG_LVL_INFO;
-
        char *debug_env = getenv("OPENOCD_DEBUG_LEVEL");
        if (NULL != debug_env) {
                int value;

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to