hotspot/src/share/vm/classfile/systemDictionary.cpp
changeset 42639 762117d57d05
parent 42575 bd1618170c93
child 42650 1f304d0c888b
equal deleted inserted replaced
42638:793e65ba88aa 42639:762117d57d05
   619     }
   619     }
   620   }
   620   }
   621   return (nh);
   621   return (nh);
   622 }
   622 }
   623 
   623 
   624 // utility function for class load event
       
   625 static void post_class_load_event(const Ticks& start_time,
   624 static void post_class_load_event(const Ticks& start_time,
   626                                   instanceKlassHandle k,
   625                                   instanceKlassHandle k,
   627                                   Handle initiating_loader) {
   626                                   const ClassLoaderData* init_cld) {
   628 #if INCLUDE_TRACE
   627 #if INCLUDE_TRACE
   629   EventClassLoad event(UNTIMED);
   628   EventClassLoad event(UNTIMED);
   630   if (event.should_commit()) {
   629   if (event.should_commit()) {
   631     event.set_starttime(start_time);
   630     event.set_starttime(start_time);
   632     event.set_loadedClass(k());
   631     event.set_loadedClass(k());
   633     oop defining_class_loader = k->class_loader();
   632     event.set_definingClassLoader(k->class_loader_data());
   634     event.set_definingClassLoader(defining_class_loader != NULL ?
   633     event.set_initiatingClassLoader(init_cld);
   635       defining_class_loader->klass() : (Klass*)NULL);
       
   636     oop class_loader = initiating_loader.is_null() ? (oop)NULL : initiating_loader();
       
   637     event.set_initiatingClassLoader(class_loader != NULL ?
       
   638       class_loader->klass() : (Klass*)NULL);
       
   639     event.commit();
   634     event.commit();
   640   }
   635   }
   641 #endif // INCLUDE_TRACE
   636 #endif // INCLUDE_TRACE
   642 }
   637 }
   643 
   638 
   644 // utility function for class define event
   639 static void class_define_event(instanceKlassHandle k,
   645 static void class_define_event(instanceKlassHandle k) {
   640                                const ClassLoaderData* def_cld) {
   646 #if INCLUDE_TRACE
   641 #if INCLUDE_TRACE
   647   EventClassDefine event(UNTIMED);
   642   EventClassDefine event;
   648   if (event.should_commit()) {
   643   if (event.should_commit()) {
   649     event.set_definedClass(k());
   644     event.set_definedClass(k());
   650     oop defining_class_loader = k->class_loader();
   645     event.set_definingClassLoader(def_cld);
   651     event.set_definingClassLoader(defining_class_loader != NULL ?
       
   652       defining_class_loader->klass() : (Klass*)NULL);
       
   653     event.commit();
   646     event.commit();
   654   }
   647   }
   655 #endif // INCLUDE_TRACE
   648 #endif // INCLUDE_TRACE
   656 }
   649 }
   657 
   650 
   905 
   898 
   906   if (HAS_PENDING_EXCEPTION || k.is_null()) {
   899   if (HAS_PENDING_EXCEPTION || k.is_null()) {
   907     return NULL;
   900     return NULL;
   908   }
   901   }
   909 
   902 
   910   post_class_load_event(class_load_start_time, k, class_loader);
   903   post_class_load_event(class_load_start_time, k, loader_data);
   911 
   904 
   912 #ifdef ASSERT
   905 #ifdef ASSERT
   913   {
   906   {
   914     ClassLoaderData* loader_data = k->class_loader_data();
   907     ClassLoaderData* loader_data = k->class_loader_data();
   915     MutexLocker mu(SystemDictionary_lock, THREAD);
   908     MutexLocker mu(SystemDictionary_lock, THREAD);
  1088     if (JvmtiExport::should_post_class_load()) {
  1081     if (JvmtiExport::should_post_class_load()) {
  1089         assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
  1082         assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
  1090         JvmtiExport::post_class_load((JavaThread *) THREAD, k());
  1083         JvmtiExport::post_class_load((JavaThread *) THREAD, k());
  1091     }
  1084     }
  1092 
  1085 
  1093     post_class_load_event(class_load_start_time, k, class_loader);
  1086     post_class_load_event(class_load_start_time, k, loader_data);
  1094   }
  1087   }
  1095   assert(host_klass != NULL || NULL == cp_patches,
  1088   assert(host_klass != NULL || NULL == cp_patches,
  1096          "cp_patches only found with host_klass");
  1089          "cp_patches only found with host_klass");
  1097 
  1090 
  1098   return k();
  1091   return k();
  1639   if (JvmtiExport::should_post_class_load()) {
  1632   if (JvmtiExport::should_post_class_load()) {
  1640       assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
  1633       assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
  1641       JvmtiExport::post_class_load((JavaThread *) THREAD, k());
  1634       JvmtiExport::post_class_load((JavaThread *) THREAD, k());
  1642 
  1635 
  1643   }
  1636   }
  1644   class_define_event(k);
  1637   class_define_event(k, loader_data);
  1645 }
  1638 }
  1646 
  1639 
  1647 // Support parallel classloading
  1640 // Support parallel classloading
  1648 // All parallel class loaders, including bootstrap classloader
  1641 // All parallel class loaders, including bootstrap classloader
  1649 // lock a placeholder entry for this class/class_loader pair
  1642 // lock a placeholder entry for this class/class_loader pair