aboutsummaryrefslogtreecommitdiff
path: root/perf
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2010-08-23 21:27:40 -0700
committerArjan van de Ven <arjan@linux.intel.com>2010-08-23 21:27:40 -0700
commitf92c5385509c189dc018398b9a5c5e385b177952 (patch)
treecb456d16e9a7aa8518522dc3c26c5283092e0d67 /perf
parent1c5b04def98702929805e331881f088ee4b111a6 (diff)
downloadpowertop-f92c5385509c189dc018398b9a5c5e385b177952.tar.gz
fix some memory leaks
Diffstat (limited to 'perf')
-rw-r--r--perf/perf.cpp8
-rw-r--r--perf/perf.h2
-rw-r--r--perf/perf_bundle.cpp3
3 files changed, 12 insertions, 1 deletions
diff --git a/perf/perf.cpp b/perf/perf.cpp
index e205bd8..9bef4b3 100644
--- a/perf/perf.cpp
+++ b/perf/perf.cpp
@@ -144,6 +144,8 @@ void perf_event::create_perf_event(char *eventname, int cpu)
void perf_event::set_event_name(const char *event_name)
{
+ if (name)
+ free(name);
name = strdup(event_name);
char *c;
@@ -154,6 +156,12 @@ void perf_event::set_event_name(const char *event_name)
trace_type = get_trace_type(name);
}
+perf_event::~perf_event(void)
+{
+ if (name)
+ free(name);
+}
+
void perf_event::set_cpu(int _cpu)
{
cpu = _cpu;
diff --git a/perf/perf.h b/perf/perf.h
index e36a716..964393e 100644
--- a/perf/perf.h
+++ b/perf/perf.h
@@ -25,6 +25,8 @@ public:
perf_event(void);
perf_event(const char *event_name, int cpu = 0, int buffer_size = 128);
+ ~perf_event(void);
+
void set_event_name(const char *event_name);
void set_cpu(int cpu);
diff --git a/perf/perf_bundle.cpp b/perf/perf_bundle.cpp
index 1ba024e..863fa30 100644
--- a/perf/perf_bundle.cpp
+++ b/perf/perf_bundle.cpp
@@ -48,7 +48,8 @@ void perf_bundle::add_event(const char *event_name)
if ((int)ev->trace_type >= 0) {
if (event_names.size() <= ev->trace_type)
event_names.resize(ev->trace_type + 1, NULL);
- event_names[ev->trace_type] = strdup(event_name);
+ if (!event_names[ev->trace_type])
+ event_names[ev->trace_type] = strdup(event_name);
events.push_back(ev);
} else {