Corey,

Glad to see this patch. This functionality had been on my wishlist for some
time. This is needed to validate the multi-group support. I have a few comments,
see below.

> diff --git a/perf_examples/perf_util.c b/perf_examples/perf_util.c
> index 4de21a8..3853ddf 100644
> --- a/perf_examples/perf_util.c
> +++ b/perf_examples/perf_util.c
> @@ -34,9 +34,11 @@
>  int
>  perf_setup_argv_events(char **argv, perf_event_desc_t **fd)
>  {
> -       perf_event_desc_t *fdt = NULL;
> -       int num = 0, max_fd = 0, new_max;
> +       static perf_event_desc_t *fdt = NULL;
> +       static int num = 0, max_fd = 0;

I'd rather not have a static variable here. This can lead to error
if someone reuses that code in a multi-threaded app. See below
for an alternative.


> +       for (grp = 0; grp < options.num_groups; grp++) {
> +               num = perf_setup_list_events(options.events[grp], &fds);
> +               if (num < 1)
> +                       exit(1);
> +       }
>
To avoid the static in perf_setup_list_events(), I would rather have something
like:

            old_num = num;
            num = perf_setup_list_events(options.events[grp], &fds, num);
            if (num == old_num)
                   exit(1);

That way the function is re-entrant. And in case the return value is bogus,
the caller can either decide to continue with fewer groups or fail.

------------------------------------------------------------------------------
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to