[lttng-dev] [RFC PATCH lttng-tools 15/18] Integrate serialized communication in lttng-ctl and sessiond
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Thu Apr 18 15:49:21 EDT 2019
----- On Apr 18, 2019, at 12:18 PM, Yannick Lamarre ylamarre at efficios.com wrote:
> lttng-ctl and lttng-sessiond use serialized communication for
> messages using lttng_event.
>
> Signed-off-by: Yannick Lamarre <ylamarre at efficios.com>
> ---
> src/bin/lttng-sessiond/client.c | 23 ++++++++++++++++++++---
> src/common/sessiond-comm/sessiond-comm.h | 4 ++--
> src/lib/lttng-ctl/lttng-ctl.c | 14 ++++++++++----
> 3 files changed, 32 insertions(+), 9 deletions(-)
>
> diff --git a/src/bin/lttng-sessiond/client.c b/src/bin/lttng-sessiond/client.c
> index 24e688c5..aed415ee 100644
> --- a/src/bin/lttng-sessiond/client.c
> +++ b/src/bin/lttng-sessiond/client.c
> @@ -1150,6 +1150,7 @@ error_add_context:
> case LTTNG_DISABLE_EVENT:
> {
>
> + struct lttng_event event;
I think we should remove the extra newline before the struct definition above
while we are there.
> /*
> * FIXME: handle filter; for now we just receive the filter's
> * bytecode along with the filter expression which are sent by
> @@ -1176,10 +1177,17 @@ error_add_context:
> count -= (size_t) ret;
> }
> }
> - /* FIXME: passing packed structure to non-packed pointer */
> + lttng_event_no_attr_deserialize(&event, &cmd_ctx->lsm->u.disable.event);
> + if (cmd_ctx->lsm->domain.type == LTTNG_DOMAIN_KERNEL) {
Those if() would be neater in a switch() case.
> + if (event.type == LTTNG_EVENT_PROBE || event.type == LTTNG_EVENT_FUNCTION ||
> event.type == LTTNG_EVENT_USERSPACE_PROBE) {
> + lttng_event_probe_attr_deserialize(&event, &cmd_ctx->lsm->u.disable.event);
> + } else if (event.type == LTTNG_EVENT_FUNCTION_ENTRY) {
> + lttng_event_function_attr_deserialize(&event,
> &cmd_ctx->lsm->u.disable.event);
> + }
else what ? Error handling ?
if () else if () without a following else typically hides missing error handling.
[...]
> - ev = lttng_event_copy(&cmd_ctx->lsm->u.enable.event);
> + lttng_event_no_attr_deserialize(&event, &cmd_ctx->lsm->u.disable.event);
> + if (cmd_ctx->lsm->domain.type == LTTNG_DOMAIN_KERNEL) {
> + if (event.type == LTTNG_EVENT_PROBE || event.type == LTTNG_EVENT_FUNCTION ||
> event.type == LTTNG_EVENT_USERSPACE_PROBE) {
> + lttng_event_probe_attr_deserialize(&event, &cmd_ctx->lsm->u.disable.event);
> + } else if (event.type == LTTNG_EVENT_FUNCTION_ENTRY) {
> + lttng_event_function_attr_deserialize(&event,
> &cmd_ctx->lsm->u.disable.event);
> + }
same.
> + }
> + ev = lttng_event_copy(&event);
> if (!ev) {
> DBG("Failed to copy event: %s",
> cmd_ctx->lsm->u.enable.event.name);
> diff --git a/src/common/sessiond-comm/sessiond-comm.h
> b/src/common/sessiond-comm/sessiond-comm.h
> index 78b18185..4c2240a0 100644
> --- a/src/common/sessiond-comm/sessiond-comm.h
> +++ b/src/common/sessiond-comm/sessiond-comm.h
> @@ -370,7 +370,7 @@ struct lttcomm_session_msg {
> /* Event data */
> struct {
> char channel_name[LTTNG_SYMBOL_NAME_LEN];
> - struct lttng_event event LTTNG_PACKED;
> + struct lttng_event_serialized event;
> /* Length of following filter expression. */
> uint32_t expression_len;
> /* Length of following bytecode for filter. */
> @@ -389,7 +389,7 @@ struct lttcomm_session_msg {
> } LTTNG_PACKED enable;
> struct {
> char channel_name[LTTNG_SYMBOL_NAME_LEN];
> - struct lttng_event event LTTNG_PACKED;
> + struct lttng_event_serialized event;
> /* Length of following filter expression. */
> uint32_t expression_len;
> /* Length of following bytecode for filter. */
> diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
> index 686a98ef..a9adb5c2 100644
> --- a/src/lib/lttng-ctl/lttng-ctl.c
> +++ b/src/lib/lttng-ctl/lttng-ctl.c
> @@ -1110,8 +1110,15 @@ int lttng_enable_event_with_exclusions(struct
> lttng_handle *handle,
> }
>
> lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
> - /* FIXME: copying non-packed struct to packed struct. */
> - memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
> +
> + lttng_event_no_attr_serialize(&lsm.u.enable.event, ev);
> + if (handle->domain.type == LTTNG_DOMAIN_KERNEL) {
> + if (ev->type == LTTNG_EVENT_PROBE || ev->type == LTTNG_EVENT_FUNCTION ||
> ev->type == LTTNG_EVENT_USERSPACE_PROBE) {
> + lttng_event_probe_attr_serialize(&lsm.u.enable.event, ev);
> + } else if (ev->type == LTTNG_EVENT_FUNCTION_ENTRY) {
> + lttng_event_function_attr_serialize(&lsm.u.enable.event, ev);
> + }
> + }
same.
Thanks,
Mathieu
>
> lttng_ctl_copy_string(lsm.session.name, handle->session_name,
> sizeof(lsm.session.name));
> @@ -1310,8 +1317,7 @@ int lttng_disable_event_ext(struct lttng_handle *handle,
> lsm.cmd_type = LTTNG_DISABLE_EVENT;
>
> lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
> - /* FIXME: copying non-packed struct to packed struct. */
> - memcpy(&lsm.u.disable.event, ev, sizeof(lsm.u.disable.event));
> + lttng_event_no_attr_serialize(&lsm.u.disable.event, ev);
>
> lttng_ctl_copy_string(lsm.session.name, handle->session_name,
> sizeof(lsm.session.name));
> --
> 2.11.0
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list