Messages in this thread Patch in this message | | | Date | Thu, 17 Oct 2019 14:41:14 -0400 | From | Steven Rostedt <> | Subject | Re: [BUG] libtraceevent: perf script -g python segfaults |
| |
On Thu, 17 Oct 2019 14:38:41 -0400 Steven Rostedt <rostedt@goodmis.org> wrote:
> struct tep_event *trace_find_next_event(struct tep_handle *pevent, > struct tep_event *event) > { > + static struct tep_event **all_events; > static int idx; > int events_count; > - struct tep_event *all_events;
If we are going to use static variables, let's make them all static and optimize it a little more...
-- Steve
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index ad74be1f0e42..3f23462517a3 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c @@ -193,30 +193,35 @@ int parse_event_file(struct tep_handle *pevent, struct tep_event *trace_find_next_event(struct tep_handle *pevent, struct tep_event *event) { + static struct tep_event **all_events; + static int events_count; static int idx; - int events_count; - struct tep_event *all_events; - all_events = tep_get_first_event(pevent); - events_count = tep_get_events_count(pevent); - if (!pevent || !all_events || events_count < 1) + if (!pevent || !all_events) return NULL; if (!event) { idx = 0; - return all_events; + events_count = tep_get_events_count(pevent); + if (events_count < 1) + return NULL; + + all_events = tep_list_events(pevent, TEP_EVENT_SORT_ID); + if (all_events) + return all_events[0]; + return NULL; } - if (idx < events_count && event == (all_events + idx)) { + if (idx < events_count && event == all_events[idx]) { idx++; if (idx == events_count) return NULL; - return (all_events + idx); + return all_events[idx]; } for (idx = 1; idx < events_count; idx++) { - if (event == (all_events + (idx - 1))) - return (all_events + idx); + if (event == all_events[idx - 1]) + return all_events[idx]; } return NULL; }
| |