Crude stat segment lock recovery
[vpp.git] / src / vlib / log.c
index aa6fe0c..8e205b9 100644 (file)
@@ -142,6 +142,7 @@ vlib_log (vlib_log_level_t level, vlib_log_class_t class, char *fmt, ...)
   u8 *s = 0;
   bool use_formatted_log_entry = true;
 
+  vec_validate (lm->entries, lm->size);
   /* make sure we are running on the main thread to avoid use in dataplane
      code, for dataplane logging consider use of event-logger */
   ASSERT (vlib_get_thread_index () == 0);
@@ -198,8 +199,9 @@ syslog:
       if (use_formatted_log_entry)
        {
          syslog (vlib_log_level_to_syslog_priority (level), "%.*s: %.*s",
-                 vec_len (tmp), tmp,
-                 vec_len (s) - (vec_c_string_is_terminated (s) ? 1 : 0), s);
+                 (int) vec_len (tmp), tmp,
+                 (int) (vec_len (s) -
+                        (vec_c_string_is_terminated (s) ? 1 : 0)), s);
        }
       else
        {
@@ -208,8 +210,8 @@ syslog:
          tmp = va_format (tmp, fmt, &va);
          va_end (va);
          syslog (vlib_log_level_to_syslog_priority (level), "%.*s",
-                 vec_len (tmp) - (vec_c_string_is_terminated (tmp) ? 1 : 0),
-                 tmp);
+                 (int) (vec_len (tmp) -
+                        (vec_c_string_is_terminated (tmp) ? 1 : 0)), tmp);
        }
       vec_free (tmp);
     }
@@ -399,11 +401,11 @@ unformat_vlib_log_level (unformat_input_t * input, va_list * args)
   vlib_log_level_t *level = va_arg (*args, vlib_log_level_t *);
   u8 *level_str = NULL;
   uword rv = 1;
-  if (unformat (input, "%v", &level_str))
+  if (unformat (input, "%s", &level_str))
     {
 #define _(v, uc, lc)                                   \
   const char __##uc[] = #lc;                           \
-  if (!memcmp (level_str, __##uc, sizeof (__##uc))) \
+  if (!strcmp ((const char *) level_str, __##uc))      \
     {                                                  \
       *level = VLIB_LOG_LEVEL_##uc;                 \
       rv = 1;                                          \