From 2b213b1689abff993a84a21f4eefe50d9884ac0a Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 26 Feb 2013 14:32:52 -0500 Subject: [PATCH] Move metadata creation into lttng-sessiond and lttng-consumed Includes fixes in type serialization. Also stop sending metadata channel events. Need to be applied in locked-step with lttng-tools commit: "Move metadata creation into lttng-sessiond and lttng-consumed" Signed-off-by: Mathieu Desnoyers --- liblttng-ust-comm/lttng-ust-comm.c | 17 +++++++----- liblttng-ust/lttng-events.c | 42 ++++++++++++++---------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/liblttng-ust-comm/lttng-ust-comm.c b/liblttng-ust-comm/lttng-ust-comm.c index 1395eee2..23de8c09 100644 --- a/liblttng-ust-comm/lttng-ust-comm.c +++ b/liblttng-ust-comm/lttng-ust-comm.c @@ -631,7 +631,8 @@ int ustcomm_send_reg_msg(int sock, } static -int serialize_basic_type(enum lttng_abstract_types atype, +int serialize_basic_type(enum ustctl_abstract_types *uatype, + enum lttng_abstract_types atype, union _ustctl_basic_type *ubt, const union _lttng_basic_type *lbt) { @@ -649,11 +650,13 @@ int serialize_basic_type(enum lttng_abstract_types atype, uit->base = lit->base; uit->encoding = lit->encoding; uit->alignment = lit->alignment; + *uatype = ustctl_atype_integer; break; } case atype_string: { ubt->string.encoding = lbt->string.encoding; + *uatype = ustctl_atype_string; break; } case atype_float: @@ -667,6 +670,7 @@ int serialize_basic_type(enum lttng_abstract_types atype, uft->mant_dig = lft->mant_dig; uft->alignment = lft->alignment; uft->reverse_byte_order = lft->reverse_byte_order; + *uatype = ustctl_atype_float; break; } case atype_enum: @@ -676,7 +680,6 @@ int serialize_basic_type(enum lttng_abstract_types atype, return -EINVAL; } return 0; - } static @@ -688,7 +691,7 @@ int serialize_one_type(struct ustctl_type *ut, const struct lttng_type *lt) case atype_integer: case atype_float: case atype_string: - ret = serialize_basic_type(lt->atype, + ret = serialize_basic_type(&ut->atype, lt->atype, &ut->u.basic, <->u.basic); if (ret) return ret; @@ -702,10 +705,11 @@ int serialize_one_type(struct ustctl_type *ut, const struct lttng_type *lt) ubt = &ut->u.array.elem_type; lbt = <->u.array.elem_type; ut->u.array.length = lt->u.array.length; - ret = serialize_basic_type(lbt->atype, + ret = serialize_basic_type(&ubt->atype, lbt->atype, &ubt->u.basic, &lbt->u.basic); if (ret) return -EINVAL; + ut->atype = ustctl_atype_array; break; } case atype_sequence: @@ -716,16 +720,17 @@ int serialize_one_type(struct ustctl_type *ut, const struct lttng_type *lt) ubt = &ut->u.sequence.length_type; lbt = <->u.sequence.length_type; - ret = serialize_basic_type(lbt->atype, + ret = serialize_basic_type(&ubt->atype, lbt->atype, &ubt->u.basic, &lbt->u.basic); if (ret) return -EINVAL; ubt = &ut->u.sequence.elem_type; lbt = <->u.sequence.elem_type; - ret = serialize_basic_type(lbt->atype, + ret = serialize_basic_type(&ubt->atype, lbt->atype, &ubt->u.basic, &lbt->u.basic); if (ret) return -EINVAL; + ut->atype = ustctl_atype_sequence; break; } case atype_enum: diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c index f77db60c..05728853 100644 --- a/liblttng-ust/lttng-events.c +++ b/liblttng-ust/lttng-events.c @@ -249,9 +249,6 @@ int lttng_session_enable(struct lttng_session *session) CMM_ACCESS_ONCE(session->active) = 1; CMM_ACCESS_ONCE(session->been_active) = 1; - ret = _lttng_session_metadata_statedump(session); - if (ret) - CMM_ACCESS_ONCE(session->active) = 0; end: return ret; } @@ -377,20 +374,26 @@ int lttng_event_create(const struct lttng_event_desc *desc, else uri = NULL; - /* Fetch event ID from sessiond */ - ret = ustcomm_register_event(notify_socket, - session->objd, - chan->objd, - event_name, - loglevel, - desc->signature, - desc->nr_fields, - desc->fields, - uri, - &event->id); - if (ret < 0) { - goto sessiond_register_error; + /* Don't register metadata events */ + if (session->metadata == chan) { + event->id = -1U; + } else { + /* Fetch event ID from sessiond */ + ret = ustcomm_register_event(notify_socket, + session->objd, + chan->objd, + event_name, + loglevel, + desc->signature, + desc->nr_fields, + desc->fields, + uri, + &event->id); + if (ret < 0) { + goto sessiond_register_error; + } } + /* Populate lttng_event structure before tracepoint registration. */ cmm_smp_wmb(); ret = __tracepoint_probe_register(event_name, @@ -399,17 +402,10 @@ int lttng_event_create(const struct lttng_event_desc *desc, if (ret) goto tracepoint_register_error; - ret = _lttng_event_metadata_statedump(chan->session, chan, event); - if (ret) - goto statedump_error; cds_list_add(&event->node, &chan->session->events_head); cds_hlist_add_head(&event->hlist, head); return 0; -statedump_error: - WARN_ON_ONCE(__tracepoint_probe_unregister(event_name, - desc->probe_callback, - event)); tracepoint_register_error: sessiond_register_error: free(event); -- 2.34.1