|
@@ -72,6 +72,7 @@ static int e_snprintf(char *str, size_t size, const char *format, ...)
|
|
|
static char *synthesize_perf_probe_point(struct perf_probe_point *pp);
|
|
|
static int convert_name_to_addr(struct perf_probe_event *pev,
|
|
|
const char *exec);
|
|
|
+static void clear_probe_trace_event(struct probe_trace_event *tev);
|
|
|
static struct machine machine;
|
|
|
|
|
|
/* Initialize symbol maps and path of vmlinux/modules */
|
|
@@ -407,6 +408,14 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void clear_probe_trace_events(struct probe_trace_event *tevs, int ntevs)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < ntevs; i++)
|
|
|
+ clear_probe_trace_event(tevs + i);
|
|
|
+}
|
|
|
+
|
|
|
/* Try to find perf_probe_event with debuginfo */
|
|
|
static int try_to_find_probe_trace_events(struct perf_probe_event *pev,
|
|
|
struct probe_trace_event **tevs,
|
|
@@ -442,6 +451,10 @@ static int try_to_find_probe_trace_events(struct perf_probe_event *pev,
|
|
|
ret = add_module_to_probe_trace_events(*tevs,
|
|
|
ntevs, target);
|
|
|
}
|
|
|
+ if (ret < 0) {
|
|
|
+ clear_probe_trace_events(*tevs, ntevs);
|
|
|
+ zfree(tevs);
|
|
|
+ }
|
|
|
return ret < 0 ? ret : ntevs;
|
|
|
}
|
|
|
|