--- old/src/share/vm/classfile/moduleEntry.cpp 2017-08-14 18:59:10.518036081 -0400 +++ new/src/share/vm/classfile/moduleEntry.cpp 2017-08-14 18:59:10.290792078 -0400 @@ -80,19 +80,16 @@ } // Returns the shared ProtectionDomain -Handle ModuleEntry::shared_protection_domain() { - return Handle(Thread::current(), JNIHandles::resolve(_pd)); +oop ModuleEntry::shared_protection_domain() { + return _pd.resolve(); } // Set the shared ProtectionDomain atomically void ModuleEntry::set_shared_protection_domain(ClassLoaderData *loader_data, Handle pd_h) { // Create a handle for the shared ProtectionDomain and save it atomically. - // If someone beats us setting the _pd cache, the created handle is destroyed. - jobject obj = loader_data->add_handle(pd_h); - if (Atomic::cmpxchg_ptr(obj, &_pd, NULL) != NULL) { - loader_data->remove_handle_unsafe(obj); - } + // init_handle_locked checks if someone beats us setting the _pd cache. + loader_data->init_handle_locked(_pd, pd_h); } // Returns true if this module can read module m