hotspot/src/share/vm/prims/jvmtiImpl.cpp
changeset 8661 3dc8a18ac563
parent 8475 c2b97a27943a
child 9405 d2e9ee78c3c1
equal deleted inserted replaced
8660:de3c4dedef24 8661:3dc8a18ac563
   917 
   917 
   918 JvmtiDeferredEvent JvmtiDeferredEvent::compiled_method_load_event(
   918 JvmtiDeferredEvent JvmtiDeferredEvent::compiled_method_load_event(
   919     nmethod* nm) {
   919     nmethod* nm) {
   920   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_LOAD);
   920   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_LOAD);
   921   event._event_data.compiled_method_load = nm;
   921   event._event_data.compiled_method_load = nm;
   922   nmethodLocker::lock_nmethod(nm); // will be unlocked when posted
   922   // Keep the nmethod alive until the ServiceThread can process
       
   923   // this deferred event.
       
   924   nmethodLocker::lock_nmethod(nm);
   923   return event;
   925   return event;
   924 }
   926 }
   925 
   927 
   926 JvmtiDeferredEvent JvmtiDeferredEvent::compiled_method_unload_event(
   928 JvmtiDeferredEvent JvmtiDeferredEvent::compiled_method_unload_event(
   927     jmethodID id, const void* code) {
   929     nmethod* nm, jmethodID id, const void* code) {
   928   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_UNLOAD);
   930   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_COMPILED_METHOD_UNLOAD);
       
   931   event._event_data.compiled_method_unload.nm = nm;
   929   event._event_data.compiled_method_unload.method_id = id;
   932   event._event_data.compiled_method_unload.method_id = id;
   930   event._event_data.compiled_method_unload.code_begin = code;
   933   event._event_data.compiled_method_unload.code_begin = code;
       
   934   // Keep the nmethod alive until the ServiceThread can process
       
   935   // this deferred event. This will keep the memory for the
       
   936   // generated code from being reused too early. We pass
       
   937   // zombie_ok == true here so that our nmethod that was just
       
   938   // made into a zombie can be locked.
       
   939   nmethodLocker::lock_nmethod(nm, true /* zombie_ok */);
   931   return event;
   940   return event;
   932 }
   941 }
   933 JvmtiDeferredEvent JvmtiDeferredEvent::dynamic_code_generated_event(
   942 JvmtiDeferredEvent JvmtiDeferredEvent::dynamic_code_generated_event(
   934       const char* name, const void* code_begin, const void* code_end) {
   943       const char* name, const void* code_begin, const void* code_end) {
   935   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_DYNAMIC_CODE_GENERATED);
   944   JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_DYNAMIC_CODE_GENERATED);
   944          "Service thread must post enqueued events");
   953          "Service thread must post enqueued events");
   945   switch(_type) {
   954   switch(_type) {
   946     case TYPE_COMPILED_METHOD_LOAD: {
   955     case TYPE_COMPILED_METHOD_LOAD: {
   947       nmethod* nm = _event_data.compiled_method_load;
   956       nmethod* nm = _event_data.compiled_method_load;
   948       JvmtiExport::post_compiled_method_load(nm);
   957       JvmtiExport::post_compiled_method_load(nm);
       
   958       // done with the deferred event so unlock the nmethod
   949       nmethodLocker::unlock_nmethod(nm);
   959       nmethodLocker::unlock_nmethod(nm);
   950       break;
   960       break;
   951     }
   961     }
   952     case TYPE_COMPILED_METHOD_UNLOAD:
   962     case TYPE_COMPILED_METHOD_UNLOAD: {
       
   963       nmethod* nm = _event_data.compiled_method_unload.nm;
   953       JvmtiExport::post_compiled_method_unload(
   964       JvmtiExport::post_compiled_method_unload(
   954         _event_data.compiled_method_unload.method_id,
   965         _event_data.compiled_method_unload.method_id,
   955         _event_data.compiled_method_unload.code_begin);
   966         _event_data.compiled_method_unload.code_begin);
       
   967       // done with the deferred event so unlock the nmethod
       
   968       nmethodLocker::unlock_nmethod(nm);
   956       break;
   969       break;
       
   970     }
   957     case TYPE_DYNAMIC_CODE_GENERATED:
   971     case TYPE_DYNAMIC_CODE_GENERATED:
   958       JvmtiExport::post_dynamic_code_generated_internal(
   972       JvmtiExport::post_dynamic_code_generated_internal(
   959         _event_data.dynamic_code_generated.name,
   973         _event_data.dynamic_code_generated.name,
   960         _event_data.dynamic_code_generated.code_begin,
   974         _event_data.dynamic_code_generated.code_begin,
   961         _event_data.dynamic_code_generated.code_end);
   975         _event_data.dynamic_code_generated.code_end);