1.1 --- a/src/share/vm/prims/jvmtiImpl.cpp Wed Apr 27 06:20:00 2011 -0700 1.2 +++ b/src/share/vm/prims/jvmtiImpl.cpp Thu Apr 28 08:24:46 2011 -0700 1.3 @@ -38,6 +38,7 @@ 1.4 #include "runtime/handles.inline.hpp" 1.5 #include "runtime/interfaceSupport.hpp" 1.6 #include "runtime/javaCalls.hpp" 1.7 +#include "runtime/os.hpp" 1.8 #include "runtime/serviceThread.hpp" 1.9 #include "runtime/signature.hpp" 1.10 #include "runtime/vframe.hpp" 1.11 @@ -939,10 +940,15 @@ 1.12 nmethodLocker::lock_nmethod(nm, true /* zombie_ok */); 1.13 return event; 1.14 } 1.15 + 1.16 JvmtiDeferredEvent JvmtiDeferredEvent::dynamic_code_generated_event( 1.17 const char* name, const void* code_begin, const void* code_end) { 1.18 JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_DYNAMIC_CODE_GENERATED); 1.19 - event._event_data.dynamic_code_generated.name = name; 1.20 + // Need to make a copy of the name since we don't know how long 1.21 + // the event poster will keep it around after we enqueue the 1.22 + // deferred event and return. strdup() failure is handled in 1.23 + // the post() routine below. 1.24 + event._event_data.dynamic_code_generated.name = os::strdup(name); 1.25 event._event_data.dynamic_code_generated.code_begin = code_begin; 1.26 event._event_data.dynamic_code_generated.code_end = code_end; 1.27 return event; 1.28 @@ -968,12 +974,19 @@ 1.29 nmethodLocker::unlock_nmethod(nm); 1.30 break; 1.31 } 1.32 - case TYPE_DYNAMIC_CODE_GENERATED: 1.33 + case TYPE_DYNAMIC_CODE_GENERATED: { 1.34 JvmtiExport::post_dynamic_code_generated_internal( 1.35 - _event_data.dynamic_code_generated.name, 1.36 + // if strdup failed give the event a default name 1.37 + (_event_data.dynamic_code_generated.name == NULL) 1.38 + ? "unknown_code" : _event_data.dynamic_code_generated.name, 1.39 _event_data.dynamic_code_generated.code_begin, 1.40 _event_data.dynamic_code_generated.code_end); 1.41 + if (_event_data.dynamic_code_generated.name != NULL) { 1.42 + // release our copy 1.43 + os::free((void *)_event_data.dynamic_code_generated.name); 1.44 + } 1.45 break; 1.46 + } 1.47 default: 1.48 ShouldNotReachHere(); 1.49 }