From ae1892fb0fb6b7646f9ca60067d6945ccea7f888 Mon Sep 17 00:00:00 2001 From: Igor Veresov Date: Wed, 4 Jun 2025 14:07:49 +0000 Subject: [PATCH] 8358003: KlassTrainingData initializer reads garbage holder Reviewed-by: coleenp, shade, vlivanov --- src/hotspot/share/oops/trainingData.cpp | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/hotspot/share/oops/trainingData.cpp b/src/hotspot/share/oops/trainingData.cpp index 543462b1182..2ae1ac18699 100644 --- a/src/hotspot/share/oops/trainingData.cpp +++ b/src/hotspot/share/oops/trainingData.cpp @@ -432,24 +432,11 @@ void KlassTrainingData::print_on(outputStream* st, bool name_only) const { } KlassTrainingData::KlassTrainingData(InstanceKlass* klass) : TrainingData(klass) { - if (holder() == klass) { - return; // no change to make - } - - jobject hmj = _holder_mirror; - if (hmj != nullptr) { // clear out previous handle, if any - _holder_mirror = nullptr; - assert(JNIHandles::is_global_handle(hmj), ""); - JNIHandles::destroy_global(hmj); - } - - if (klass != nullptr) { - Handle hm(JavaThread::current(), klass->java_mirror()); - hmj = JNIHandles::make_global(hm); - Atomic::release_store(&_holder_mirror, hmj); - } - - Atomic::release_store(&_holder, const_cast(klass)); + assert(klass != nullptr, ""); + Handle hm(JavaThread::current(), klass->java_mirror()); + jobject hmj = JNIHandles::make_global(hm); + _holder_mirror = hmj; + _holder = klass; assert(holder() == klass, ""); }