RFR (S) 8208172: SIGSEGV when owner of invokedynamic bootstrap method throws an exception - Symbol::increment_refcount()+0x0
David Holmes
david.holmes at oracle.com
Tue Aug 21 02:25:15 UTC 2018
On 21/08/2018 10:30 AM, coleen.phillimore at oracle.com wrote:
>
>
> On 8/20/18 7:56 PM, David Holmes wrote:
>> Hi Coleen,
>>
>> Looks good.
>>
>> On 21/08/2018 6:04 AM, coleen.phillimore at oracle.com wrote:
>>> Summary: make table for resolution errors not always expect non-null
>>> message string.
>>
>> Thanks for fixing this. I'm unsure why we thought there had to be a
>> detail message? AFAIK there is no specified requirement for this.
>> Obviously having a detail message is the most common case.
>>
>> I'm also not clear why we only hit this in the indy bootstrap case?
>
> We always create LinkageErrors in the vm with a message, so we expected
> one to always be present. The case where it's converted to
> ExceptionInInitializerError hadn't been seen, or expected to be missing
> this information. It's probably possible to write a test to have
> LinkageError => EIIE without indy.
The obvious direct example to produce EIIE from a static initializer
doesn't induce the problem. Interesting ...
>>
>> One minor comment:
>>
>> src/hotspot/share/classfile/resolutionErrors.cpp
>>
>> void ResolutionErrorEntry::set_message(Symbol* c) {
>> _message = c;
>> + if (_message != NULL) {
>> _message->increment_refcount();
>> + }
>> }
>>
>> Is there any reason not to move the assignment inside the if clause as
>> well?
>>
>
> The C++ class isn't zero initialized, so we have to initialize the
> message to NULL.
And no constructor that does the init either - okay.
Thanks,
David
> Thanks,
> Coleen
>
>> Thanks,
>> David
>>
>>> Tested with hs-tier1-2, and all hotspot/jtreg/runtime tests, and test
>>> added.
>>>
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8208172.01/webrev
>>> bug link https://bugs.openjdk.java.net/browse/JDK-8208172
>>>
>>> Thanks,
>>> Coleen
>
More information about the hotspot-runtime-dev
mailing list