Bail out of logging early.
authorMathew Heard <splitice@users.noreply.github.com>
Tue, 29 Jun 2021 00:24:00 +0000 (10:24 +1000)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 13 Jul 2021 20:25:01 +0000 (22:25 +0200)
Low hanging fruit, 2% of perf trace.

src/logger.c

index 062f759..9c02a3d 100644 (file)
@@ -37,22 +37,21 @@ static FILE *logfile = NULL;
 static HANDLE loghandle = NULL;
 #endif
 static const char *logident = NULL;
-bool logcontrol = false;
+bool logcontrol = false; // controlled by REQ_LOG <level>
 int umbilical = 0;
 
+static bool should_log(int level) {
+       return (level <= debug_level && logmode != LOGMODE_NULL) || logcontrol;
+}
+
 static void real_logger(int level, int priority, const char *message) {
        char timestr[32] = "";
        static bool suppress = false;
 
-       // Bail out early if there is nothing to do.
        if(suppress) {
                return;
        }
 
-       if(!logcontrol && (level > debug_level || logmode == LOGMODE_NULL)) {
-               return;
-       }
-
        if(level <= debug_level) {
                switch(logmode) {
                case LOGMODE_STDERR:
@@ -125,6 +124,10 @@ void logger(int level, int priority, const char *format, ...) {
        va_list ap;
        char message[1024] = "";
 
+       if(!should_log(level)) {
+               return;
+       }
+
        va_start(ap, format);
        int len = vsnprintf(message, sizeof(message), format, ap);
        message[sizeof(message) - 1] = 0;
@@ -142,6 +145,10 @@ static void sptps_logger(sptps_t *s, int s_errno, const char *format, va_list ap
        char message[1024];
        size_t msglen = sizeof(message);
 
+       if(!should_log(DEBUG_ALWAYS)) {
+               return;
+       }
+
        int len = vsnprintf(message, msglen, format, ap);
        message[sizeof(message) - 1] = 0;