RFR: 8258408: SystemDictionary passes TRAPS to functions that don't throw exceptions [v2]

Coleen Phillimore coleenp at openjdk.java.net
Fri Dec 18 02:18:02 UTC 2020


On Fri, 18 Dec 2020 02:14:12 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> // definer must notify any waiting threads
>>   {
>>     MutexLocker mu(THREAD, SystemDictionary_lock);
>>     PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name_h, loader_data);
>>     assert(probe != NULL, "DEFINE_CLASS placeholder lost?");
>>     if (probe != NULL) {
>>       if (HAS_PENDING_EXCEPTION) {
>>         linkage_exception = Handle(THREAD,PENDING_EXCEPTION);
>>         CLEAR_PENDING_EXCEPTION;
>>       } else {
>>         probe->set_instance_klass(k);
>>       }
>>       probe->set_definer(NULL);
>>       placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, THREAD);
>>       SystemDictionary_lock->notify_all();
>>     }
>>   }
>> 
>>   // Can't throw exception while holding lock due to rank ordering
>>   if (linkage_exception() != NULL) {
>>     THROW_OOP_(linkage_exception(), NULL); // throws exception and returns
>>   }
>
> // definer must notify any waiting threads
>   {
>     MutexLocker mu(THREAD, SystemDictionary_lock);
>     PlaceholderEntry* probe = placeholders()->get_entry(name_hash, name_h, loader_data);
>     assert(probe != NULL, "DEFINE_CLASS placeholder lost?");
>     if (!HAS_PENDING_EXCEPTION) {
>       probe->set_instance_klass(k);
>     }
>     probe->set_definer(NULL);
>     placeholders()->find_and_remove(name_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, THREAD);
>     SystemDictionary_lock->notify_all();
>   }

old code vs. new code.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1808


More information about the hotspot-dev mailing list