< prev index next >

src/hotspot/share/prims/jvmtiImpl.cpp

Print this page

        

*** 941,950 **** --- 941,960 ---- event._event_data.dynamic_code_generated.code_begin = code_begin; event._event_data.dynamic_code_generated.code_end = code_end; return event; } + JvmtiDeferredEvent JvmtiDeferredEvent::class_unload_event(const char* name) { + JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_CLASS_UNLOADED); + // Need to make a copy of the name since we don't know how long + // the event poster will keep it around after we enqueue the + // deferred event and return. strdup() failure is handled in + // the post() routine below. + event._event_data.class_unloaded.name = os::strdup(name); + return event; + } + void JvmtiDeferredEvent::post() { assert(ServiceThread::is_service_thread(Thread::current()), "Service thread must post enqueued events"); switch(_type) { case TYPE_COMPILED_METHOD_LOAD: {
*** 974,983 **** --- 984,1004 ---- // release our copy os::free((void *)_event_data.dynamic_code_generated.name); } break; } + case TYPE_CLASS_UNLOADED: { + JvmtiExport::post_class_unload_internal( + // if strdup failed give the event a default name + (_event_data.class_unloaded.name == NULL) + ? "unknown_class" : _event_data.class_unloaded.name); + if (_event_data.class_unloaded.name != NULL) { + // release our copy + os::free((void *)_event_data.class_unloaded.name); + } + break; + } default: ShouldNotReachHere(); } }
< prev index next >