#include <vppinfra/format.h>
#include <vppinfra/hash.h>
#include <vppinfra/math.h>
+#include <vppinfra/lock.h>
static inline void
elog_lock (elog_main_t * em)
{
if (PREDICT_FALSE (em->lock != 0))
while (clib_atomic_test_and_set (em->lock))
- ;
+ CLIB_PAUSE ();
}
static inline void
{
if (PREDICT_FALSE (em->lock != 0))
{
- CLIB_MEMORY_BARRIER ();
- *em->lock = 0;
+ clib_atomic_release (em->lock);
}
}
void *d = (u8 *) e->data;
char arg_format[64];
- t = vec_elt_at_index (em->event_types, e->type);
+ t = vec_elt_at_index (em->event_types, e->event_type);
f = t->format;
a = t->format_args;
{
if (e->track != track_index)
continue;
- s = format (s, "%U%18.9f: %U\n", format_white_space, indent, e->time + dt,
- format_elog_event, em, e);
+ s = format (s, "%U%18.9f: %U\n", format_white_space, indent,
+ e->time + dt, format_elog_event, em, e);
}
vec_free (es);
return s;
}
+char *
+format_one_elog_event (void *em_arg, void *ep_arg)
+{
+ elog_main_t *em = (elog_main_t *) em_arg;
+ elog_event_t *ep = (elog_event_t *) ep_arg;
+
+ return (char *) format (0, "%U", format_elog_event, em, ep);
+}
+
void
elog_time_now (elog_time_stamp_t * et)
{
em->string_table_tmp = va_format (em->string_table_tmp, fmt, &va);
va_end (va);
+ /* String table entries MUST be NULL terminated */
+ len = vec_len (em->string_table_tmp);
+ ASSERT (len > 0);
+ if (em->string_table_tmp[len - 1] != 0)
+ vec_add1 (em->string_table_tmp, 0);
+
/* See if we already have this string in the string table */
p = hash_get_mem (em->string_table_hash, em->string_table_tmp);
return (p[0]);
}
- /* We don't, so add it. String table entries MUST be NULL terminated */
- len = vec_len (em->string_table_tmp);
- ASSERT (len > 0);
- if (em->string_table_tmp[len - 1] != 0)
- vec_add1 (em->string_table_tmp, 0);
+ /* We don't, so add it. */
offset = vec_len (em->string_table);
vec_append (em->string_table, em->string_table_tmp);
/* Across all (copied) src events... */
for (e = dst->events + l; e < vec_end (dst->events); e++)
{
- elog_event_type_t *t = vec_elt_at_index (src->event_types, e->type);
+ elog_event_type_t *t =
+ vec_elt_at_index (src->event_types, e->event_type);
/* Remap type from src -> dst. */
- e->type = find_or_create_type (dst, t);
+ e->event_type = find_or_create_type (dst, t);
/* Remap string table offsets for 'T' format args */
maybe_fix_string_table_offset (e, t,
{
elog_main_t *em = va_arg (*va, elog_main_t *);
elog_event_t *e = va_arg (*va, elog_event_t *);
- elog_event_type_t *t = vec_elt_at_index (em->event_types, e->type);
+ elog_event_type_t *t = vec_elt_at_index (em->event_types, e->event_type);
u8 *d = e->data;
u8 *p = (u8 *) t->format_args;
- serialize_integer (m, e->type, sizeof (e->type));
+ serialize_integer (m, e->event_type, sizeof (e->event_type));
serialize_integer (m, e->track, sizeof (e->track));
serialize (m, serialize_f64, e->time);
{
u16 tmp[2];
- unserialize_integer (m, &tmp[0], sizeof (e->type));
+ unserialize_integer (m, &tmp[0], sizeof (e->event_type));
unserialize_integer (m, &tmp[1], sizeof (e->track));
- e->type = tmp[0];
+ e->event_type = tmp[0];
e->track = tmp[1];
/* Make sure it fits. */
- ASSERT (e->type == tmp[0]);
+ ASSERT (e->event_type == tmp[0]);
ASSERT (e->track == tmp[1]);
}
- t = vec_elt_at_index (em->event_types, e->type);
+ t = vec_elt_at_index (em->event_types, e->event_type);
unserialize (m, unserialize_f64, &e->time);
}
}
+#ifdef CLIB_UNIX
+clib_error_t *
+elog_write_file_not_inline (elog_main_t * em, char *clib_file, int flush_ring)
+{
+ serialize_main_t m;
+ clib_error_t *error;
+
+ error = serialize_open_clib_file (&m, clib_file);
+ if (error)
+ return error;
+ error = serialize (&m, serialize_elog_main, em, flush_ring);
+ if (!error)
+ serialize_close (&m);
+ return error;
+}
+
+clib_error_t *
+elog_read_file_not_inline (elog_main_t * em, char *clib_file)
+{
+ serialize_main_t m;
+ clib_error_t *error;
+
+ error = unserialize_open_clib_file (&m, clib_file);
+ if (error)
+ return error;
+ error = unserialize (&m, unserialize_elog_main, em);
+ if (!error)
+ unserialize_close (&m);
+ return error;
+}
+#endif /* CLIB_UNIX */
+
+
/*
* fd.io coding-style-patch-verification: ON
*