Fix: consumerd: slow metadata push slows down application registration
[lttng-tools.git] / src / common / event-field-value.c
index b571f6246430ad7ba667b9d24c15a519fc7b7d31..2dd1947c2eaaf5cbb10763423bfb786b779cb8cc 100644 (file)
@@ -190,8 +190,16 @@ struct lttng_event_field_value *lttng_event_field_value_string_create_with_size(
                goto error;
        }
 
-       assert(val);
-       field_val->val = strndup(val, size);
+       if (size) {
+               assert(val);
+               field_val->val = strndup(val, size);
+       } else {
+               /*
+                * User code do not expect a NULL string pointer. Populate with
+                * an empty string when length is 0.
+                */
+               field_val->val = strdup("");
+       }
        if (!field_val->val) {
                goto error;
        }
@@ -387,13 +395,19 @@ lttng_event_field_value_unsigned_int_get_value(
                                parent)->val;
                break;
        case LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM:
-               *val = container_of(
-                               container_of(field_val,
-                                       const struct lttng_event_field_value_enum,
-                                       parent),
-                               const struct lttng_event_field_value_enum_uint,
-                               parent)->val;
+       {
+               const struct lttng_event_field_value_enum *field_val_enum = container_of(
+                               field_val,
+                               const struct lttng_event_field_value_enum,
+                               parent);
+               const struct lttng_event_field_value_enum_uint
+                               *field_val_enum_uint = container_of(
+                                               field_val_enum,
+                                               const struct lttng_event_field_value_enum_uint,
+                                               parent);
+               *val = field_val_enum_uint->val;
                break;
+       }
        default:
                status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;
                goto end;
@@ -423,13 +437,19 @@ lttng_event_field_value_signed_int_get_value(
                                parent)->val;
                break;
        case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM:
-               *val = container_of(
-                               container_of(field_val,
-                                       const struct lttng_event_field_value_enum,
-                                       parent),
-                               const struct lttng_event_field_value_enum_int,
-                               parent)->val;
+       {
+               const struct lttng_event_field_value_enum *field_val_enum = container_of(
+                               field_val,
+                               const struct lttng_event_field_value_enum,
+                               parent);
+               const struct lttng_event_field_value_enum_int
+                               *field_val_enum_uint = container_of(
+                                               field_val_enum,
+                                               const struct lttng_event_field_value_enum_int,
+                                               parent);
+               *val = field_val_enum_uint->val;
                break;
+       }
        default:
                status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;
                goto end;
This page took 0.024617 seconds and 4 git commands to generate.