--- a/hotspot/src/share/vm/runtime/fprofiler.cpp Mon Aug 11 07:30:46 2014 -0700
+++ b/hotspot/src/share/vm/runtime/fprofiler.cpp Mon Aug 11 10:18:09 2014 -0700
@@ -629,10 +629,16 @@
}
vmNode(const char* name, const TickPosition where) : ProfilerNode() {
- _name = name;
+ _name = os::strdup(name);
update(where);
}
+ ~vmNode() {
+ if (_name != NULL) {
+ os::free((void*)_name);
+ }
+ }
+
const char *name() const { return _name; }
bool is_compiled() const { return true; }
@@ -784,7 +790,7 @@
assert(index >= 0, "Must be positive");
// Note that we call strdup below since the symbol may be resource allocated
if (!table[index]) {
- table[index] = new (this) vmNode(os::strdup(name), where);
+ table[index] = new (this) vmNode(name, where);
} else {
ProfilerNode* prev = table[index];
for(ProfilerNode* node = prev; node; node = node->next()) {
@@ -794,7 +800,7 @@
}
prev = node;
}
- prev->set_next(new (this) vmNode(os::strdup(name), where));
+ prev->set_next(new (this) vmNode(name, where));
}
}