X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttng-events.c;h=176908bf6d2a4587d1d341e0e9126311a4970a00;hb=b0f393f2614b6dbafc49cfbb9ccb40cf6d497398;hp=5307b722b237991935d75a93f61d04caac36e06b;hpb=141ddf2856b853516b4170ef8104afe85e6efe68;p=lttng-modules.git diff --git a/lttng-events.c b/lttng-events.c index 5307b722..176908bf 100644 --- a/lttng-events.c +++ b/lttng-events.c @@ -52,6 +52,8 @@ #include #include #include +#include +#include #define METADATA_CACHE_DEFAULT_SIZE 4096 @@ -211,6 +213,16 @@ void lttng_session_destroy(struct lttng_session *session) kfree(session); } +int lttng_session_statedump(struct lttng_session *session) +{ + int ret; + + mutex_lock(&sessions_mutex); + ret = lttng_statedump_start(session); + mutex_unlock(&sessions_mutex); + return ret; +} + int lttng_session_enable(struct lttng_session *session) { int ret = 0; @@ -241,6 +253,12 @@ int lttng_session_enable(struct lttng_session *session) /* We need to sync enablers with session before activation. */ lttng_session_sync_enablers(session); + /* Clear each stream's quiescent state. */ + list_for_each_entry(chan, &session->chan, list) { + if (chan->channel_type != METADATA_CHANNEL) + lib_ring_buffer_clear_quiescent_channel(chan->chan); + } + ACCESS_ONCE(session->active) = 1; ACCESS_ONCE(session->been_active) = 1; ret = _lttng_session_metadata_statedump(session); @@ -259,6 +277,7 @@ end: int lttng_session_disable(struct lttng_session *session) { int ret = 0; + struct lttng_channel *chan; mutex_lock(&sessions_mutex); if (!session->active) { @@ -270,6 +289,12 @@ int lttng_session_disable(struct lttng_session *session) /* Set transient enabler state to "disabled" */ session->tstate = 0; lttng_session_sync_enablers(session); + + /* Set each stream's quiescent state. */ + list_for_each_entry(chan, &session->chan, list) { + if (chan->channel_type != METADATA_CHANNEL) + lib_ring_buffer_set_quiescent_channel(chan->chan); + } end: mutex_unlock(&sessions_mutex); return ret; @@ -1884,7 +1909,7 @@ int _lttng_enum_statedump(struct lttng_session *session, if (ret) goto end; ret = lttng_metadata_printf(session, - "enum : integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u; } {\n", + "enum : integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } {\n", container_type->size, container_type->alignment, container_type->signedness, @@ -1893,7 +1918,13 @@ int _lttng_enum_statedump(struct lttng_session *session, : (container_type->encoding == lttng_encode_UTF8) ? "UTF8" : "ASCII", - container_type->base); + container_type->base, +#if __BYTE_ORDER == __BIG_ENDIAN + container_type->reverse_byte_order ? " byte_order = le;" : "" +#else + container_type->reverse_byte_order ? " byte_order = be;" : "" +#endif + ); if (ret) goto end; /* Dump all entries */ @@ -1930,33 +1961,46 @@ int _lttng_enum_statedump(struct lttng_session *session, if (ret) goto end; } - ret = lttng_metadata_printf(session, - "\" = "); + ret = lttng_metadata_printf(session, "\""); if (ret) goto end; - if (entry->start.signedness) - ret = lttng_metadata_printf(session, - "%lld", (long long) entry->start.value); - else - ret = lttng_metadata_printf(session, - "%llu", entry->start.value); - if (ret) - goto end; - if (entry->start.signedness == entry->end.signedness && - entry->start.value == entry->end.value) { - ret = lttng_metadata_printf(session, - ",\n"); + + if (entry->options.is_auto) { + ret = lttng_metadata_printf(session, ",\n"); + if (ret) + goto end; } else { - if (entry->end.signedness) { + ret = lttng_metadata_printf(session, + " = "); + if (ret) + goto end; + if (entry->start.signedness) ret = lttng_metadata_printf(session, - " ... %lld,\n", (long long) entry->end.value); - } else { + "%lld", (long long) entry->start.value); + else ret = lttng_metadata_printf(session, - " ... %llu,\n", entry->end.value); + "%llu", entry->start.value); + if (ret) + goto end; + if (entry->start.signedness == entry->end.signedness && + entry->start.value + == entry->end.value) { + ret = lttng_metadata_printf(session, + ",\n"); + } else { + if (entry->end.signedness) { + ret = lttng_metadata_printf(session, + " ... %lld,\n", + (long long) entry->end.value); + } else { + ret = lttng_metadata_printf(session, + " ... %llu,\n", + entry->end.value); + } } + if (ret) + goto end; } - if (ret) - goto end; } ret = print_tabs(session, nesting); if (ret) @@ -2377,7 +2421,7 @@ int64_t measure_clock_offset(void) /* Disable interrupts to increase correlation precision. */ local_irq_save(flags); monotonic[0] = trace_clock_read64(); - getnstimeofday(&rts); + getnstimeofday(&rts); monotonic[1] = trace_clock_read64(); local_irq_restore(flags);