}
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)
{
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:
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:
return -EINVAL;
}
return 0;
-
}
static
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;
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:
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:
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;
}
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,
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);