From cf22367fec17f2b2650e637de84fc2f614e4d2ac Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 22 Apr 2020 12:22:19 -0400 Subject: [PATCH] Fix: incorrect field accounting for dynamic type Two field accounting issues were introduced by commit 218deb69baab "tracepoint: Refactor representation of nested types" which affect the dynamic types used by Java application contexts. The structure types should account 1 for the structure per se, in addition to the nested fields. The atype_dynamic includes an implicit enumeration, which now has two fields instead of 1. This was causing memory corruption issues in the lttng-ust-java-tests. Signed-off-by: Mathieu Desnoyers --- liblttng-ust-comm/lttng-ust-comm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/liblttng-ust-comm/lttng-ust-comm.c b/liblttng-ust-comm/lttng-ust-comm.c index d7991f19..f9398e0d 100644 --- a/liblttng-ust-comm/lttng-ust-comm.c +++ b/liblttng-ust-comm/lttng-ust-comm.c @@ -779,7 +779,7 @@ ssize_t count_one_type(const struct lttng_type *lt) return 1; case atype_struct: return count_fields_recursive(lt->u.legacy._struct.nr_fields, - lt->u.legacy._struct.fields); + lt->u.legacy._struct.fields) + 1; case atype_enum_nestable: return count_one_type(lt->u.enum_nestable.container_type) + 1; case atype_array_nestable: @@ -788,7 +788,7 @@ ssize_t count_one_type(const struct lttng_type *lt) return count_one_type(lt->u.sequence_nestable.elem_type) + 1; case atype_struct_nestable: return count_fields_recursive(lt->u.struct_nestable.nr_fields, - lt->u.struct_nestable.fields); + lt->u.struct_nestable.fields) + 1; case atype_dynamic: { @@ -801,10 +801,10 @@ ssize_t count_one_type(const struct lttng_type *lt) if (ret) return ret; /* - * One field for enum, one field for variant, and + * Two fields for enum, one field for variant, and * one field per choice. */ - return count_fields_recursive(nr_choices, choices) + 2; + return count_fields_recursive(nr_choices, choices) + 3; } default: -- 2.34.1