elog: make elog_string() multi-thread safe 14/19914/2
authorSteven Luong <sluong@cisco.com>
Fri, 31 May 2019 14:34:39 +0000 (07:34 -0700)
committerDave Barach <openvpp@barachs.net>
Tue, 4 Jun 2019 16:05:11 +0000 (16:05 +0000)
elog is supposed to be thread safe. Yet elog_string() is not. To fulfill
that promise, let's make elog_string() thread safe to avoid surprises.

Change-Id: Iab82faa7cb6719777a66c3ff14775e59a6a68a20
Signed-off-by: Steven Luong <sluong@cisco.com>
src/vppinfra/elog.c

index 6daed96..e28217c 100644 (file)
@@ -563,6 +563,7 @@ elog_string (elog_main_t * em, char *fmt, ...)
   u32 offset;
   va_list va;
 
+  elog_lock (em);
   va_start (va, fmt);
   offset = vec_len (em->string_table);
   em->string_table = (char *) va_format ((u8 *) em->string_table, fmt, &va);
@@ -571,6 +572,7 @@ elog_string (elog_main_t * em, char *fmt, ...)
   /* Null terminate string if it is not already. */
   if (vec_end (em->string_table)[-1] != 0)
     vec_add1 (em->string_table, 0);
+  elog_unlock (em);
 
   return offset;
 }