lkml.org 
[lkml]   [2020]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 03/18] perf metric: Add expr__add_id function
    Em Sun, Jul 12, 2020 at 03:26:19PM +0200, Jiri Olsa escreveu:
    > Adding expr__add_id function to data for ID
    > with zero value, which is used when scanning
    > the expression for IDs.
    >
    > Acked-by: Ian Rogers <irogers@google.com>
    > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    > ---
    > tools/perf/util/expr.c | 29 +++++++++++++++++++++++------
    > tools/perf/util/expr.h | 1 +
    > tools/perf/util/expr.y | 2 +-
    > 3 files changed, 25 insertions(+), 7 deletions(-)
    >
    > diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
    > index 5d05f9765ed8..4b8953605aed 100644
    > --- a/tools/perf/util/expr.c
    > +++ b/tools/perf/util/expr.c
    > @@ -32,6 +32,24 @@ static bool key_equal(const void *key1, const void *key2,
    > return !strcmp((const char *)key1, (const char *)key2);
    > }
    >
    > +/* Caller must make sure id is allocated */
    > +int expr__add_id(struct expr_parse_ctx *ctx, const char *id)
    > +{
    > + struct expr_id_data *data_ptr = NULL, *old_data = NULL;
    > + char *old_key = NULL;
    > + int ret;
    > +
    > + data_ptr = malloc(sizeof(*data_ptr));
    > + if (!data_ptr)
    > + return -ENOMEM;
    > +
    > + ret = hashmap__set(&ctx->ids, id, data_ptr,
    > + (const void **)&old_key, (void **)&old_data);
    > + free(old_key);
    > + free(old_data);

    Hey, if hashmap__set() fails then we leak data_ptr?

    - Arnaldo

    > + return ret;
    > +}
    > +
    > /* Caller must make sure id is allocated */
    > int expr__add_id_val(struct expr_parse_ctx *ctx, const char *id, double val)
    > {
    > @@ -39,12 +57,11 @@ int expr__add_id_val(struct expr_parse_ctx *ctx, const char *id, double val)
    > char *old_key = NULL;
    > int ret;
    >
    > - if (val != 0.0) {
    > - data_ptr = malloc(sizeof(*data_ptr));
    > - if (!data_ptr)
    > - return -ENOMEM;
    > - data_ptr->val = val;
    > - }
    > + data_ptr = malloc(sizeof(*data_ptr));
    > + if (!data_ptr)
    > + return -ENOMEM;
    > + data_ptr->val = val;
    > +
    > ret = hashmap__set(&ctx->ids, id, data_ptr,
    > (const void **)&old_key, (void **)&old_data);
    > free(old_key);
    > diff --git a/tools/perf/util/expr.h b/tools/perf/util/expr.h
    > index 21fe5bd85718..ac32cda42006 100644
    > --- a/tools/perf/util/expr.h
    > +++ b/tools/perf/util/expr.h
    > @@ -26,6 +26,7 @@ struct expr_scanner_ctx {
    >
    > void expr__ctx_init(struct expr_parse_ctx *ctx);
    > void expr__ctx_clear(struct expr_parse_ctx *ctx);
    > +int expr__add_id(struct expr_parse_ctx *ctx, const char *id);
    > int expr__add_id_val(struct expr_parse_ctx *ctx, const char *id, double val);
    > int expr__get_id(struct expr_parse_ctx *ctx, const char *id, double *val_ptr);
    > int expr__parse(double *final_val, struct expr_parse_ctx *ctx,
    > diff --git a/tools/perf/util/expr.y b/tools/perf/util/expr.y
    > index b2b3420ea6ec..8befe4a46f87 100644
    > --- a/tools/perf/util/expr.y
    > +++ b/tools/perf/util/expr.y
    > @@ -69,7 +69,7 @@ all_other: all_other other
    >
    > other: ID
    > {
    > - expr__add_id_val(ctx, $1, 0.0);
    > + expr__add_id(ctx, $1);
    > }
    > |
    > MIN | MAX | IF | ELSE | SMT_ON | NUMBER | '|' | '^' | '&' | '-' | '+' | '*' | '/' | '%' | '(' | ')' | ','
    > --
    > 2.25.4
    >

    --

    - Arnaldo

    \
     
     \ /
      Last update: 2020-07-16 17:31    [W:4.178 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site