--- a/src/hotspot/share/jfr/jni/jfrGetAllEventClasses.cpp Tue Oct 16 16:26:28 2018 -0400
+++ b/src/hotspot/share/jfr/jni/jfrGetAllEventClasses.cpp Wed Oct 31 14:38:14 2018 -0400
@@ -90,6 +90,7 @@
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
Stack<const Klass*, mtTracing> mark_stack;
+ MutexLocker ml(Compile_lock, thread);
mark_stack.push(event_klass->subklass());
while (!mark_stack.is_empty()) {
@@ -145,19 +146,16 @@
assert(klass != NULL, "invariant");
assert(JdkJfrEvent::is(klass), "invariant");
+ if (klass->subklass() == NULL) {
+ return empty_java_util_arraylist;
+ }
+
ResourceMark rm(THREAD);
GrowableArray<const void*> event_subklasses(THREAD, initial_size_growable_array);
- {
- MutexLocker cl(Compile_lock);
- if (klass->subklass() == NULL) {
- return empty_java_util_arraylist;
- }
+ fill_klasses(event_subklasses, klass, THREAD);
- fill_klasses(event_subklasses, klass, THREAD);
-
- if (event_subklasses.is_empty()) {
- return empty_java_util_arraylist;
- }
+ if (event_subklasses.is_empty()) {
+ return empty_java_util_arraylist;
}
transform_klasses_to_local_jni_handles(event_subklasses, THREAD);