Move UST registry into sessiond and implement notifiers
[lttng-tools.git] / src / lib / lttng-ctl / filter / filter-visitor-generate-bytecode.c
index 8d44f4b7ec29d3b66cde39158711abeb558db135..898072227775b2e568d5c7a90033e0403958753a 100644 (file)
@@ -27,6 +27,8 @@
 #include "filter-ir.h"
 #include "filter-ast.h"
 
+#include <common/macros.h>
+
 #ifndef max_t
 #define max_t(type, a, b)      ((type) ((a) > (b) ? (a) : (b)))
 #endif
@@ -80,11 +82,14 @@ static inline int get_count_order(unsigned int count)
 static
 int bytecode_init(struct lttng_filter_bytecode_alloc **fb)
 {
-       *fb = calloc(sizeof(struct lttng_filter_bytecode_alloc) + INIT_ALLOC_SIZE, 1);
+       uint32_t alloc_len;
+
+       alloc_len = sizeof(struct lttng_filter_bytecode_alloc) + INIT_ALLOC_SIZE;
+       *fb = calloc(alloc_len, 1);
        if (!*fb) {
                return -ENOMEM;
        } else {
-               (*fb)->alloc_len = INIT_ALLOC_SIZE;
+               (*fb)->alloc_len = alloc_len;
                return 0;
        }
 }
@@ -95,18 +100,22 @@ int32_t bytecode_reserve(struct lttng_filter_bytecode_alloc **fb, uint32_t align
        int32_t ret;
        uint32_t padding = offset_align((*fb)->b.len, align);
        uint32_t new_len = (*fb)->b.len + padding + len;
-       uint32_t new_alloc_len = sizeof(struct lttng_filter_bytecode) + new_len;
+       uint32_t new_alloc_len = sizeof(struct lttng_filter_bytecode_alloc) + new_len;
        uint32_t old_alloc_len = (*fb)->alloc_len;
 
        if (new_len > LTTNG_FILTER_MAX_LEN)
                return -EINVAL;
 
        if (new_alloc_len > old_alloc_len) {
+               struct lttng_filter_bytecode_alloc *newptr;
+
                new_alloc_len =
                        max_t(uint32_t, 1U << get_count_order(new_alloc_len), old_alloc_len << 1);
-               *fb = realloc(*fb, new_alloc_len);
-               if (!*fb)
+               newptr = realloc(*fb, new_alloc_len);
+               if (!newptr)
                        return -ENOMEM;
+               *fb = newptr;
+               /* We zero directly the memory from start of allocation. */
                memset(&((char *) *fb)[old_alloc_len], 0, new_alloc_len - old_alloc_len);
                (*fb)->alloc_len = new_alloc_len;
        }
@@ -493,7 +502,7 @@ int recursive_visit_gen_bytecode(struct filter_parser_ctx *ctx,
        }
 }
 
-__attribute__((visibility("hidden")))
+LTTNG_HIDDEN
 void filter_bytecode_free(struct filter_parser_ctx *ctx)
 {
        free(ctx->bytecode);
@@ -502,7 +511,7 @@ void filter_bytecode_free(struct filter_parser_ctx *ctx)
        ctx->bytecode_reloc = NULL;
 }
 
-__attribute__((visibility("hidden")))
+LTTNG_HIDDEN
 int filter_visitor_bytecode_generate(struct filter_parser_ctx *ctx)
 {
        int ret;
This page took 0.0248 seconds and 4 git commands to generate.