RFR(XS): JDK-6904403 assert(f == k->has_finalizer(), "inconsistent has_finalizer") with debug VM

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Thu Apr 17 14:48:14 UTC 2014


Looks good.

Thanks,
Serguei

On 4/17/14 5:56 AM, Dmitry Samersoff wrote:
> Serguei,
>
> Updated webrev:
>
> http://cr.openjdk.java.net/~dsamersoff/JDK-6904403/webrev.02/
>
>
> On 2014-04-17 02:56, serguei.spitsyn at oracle.com wrote:
>> Hi Dmitry,
>>
>> I agree with the approach in general, but think this fix is not fully
>> correct:
>>
>>   #ifdef ASSERT
>>     bool f = false;
>>     Method* m = k->lookup_method(vmSymbols::finalize_method_name(),
>>                                    vmSymbols::void_method_signature());
>>     if (m != NULL && !m->is_empty_method()) {
>> +    // Spec doesn't prevent agent from redefinition of empty finalyzer.
>> +    // despite the fact that it's generally bad idea and redefined finalyzer
>> +    // will not work as expected we shouldn't abort vm in this case
>> +    if (!k->has_been_redefined()) {
>>       f = true;
>>     }
>> +  }
>>     assert(f == k->has_finalizer(), "inconsistent has_finalizer");
>>   #endif
>>
>>
>> The issue is that if the class originally had a non-empty finalizer then
>> after a redefinition
>> the 'f' will get value 'false' which should cause this assert to
>> unreasonably fire again.
>>
>> The fix you may want is to skip the assert if a class redefinition took
>> place:
>>
>> #ifdef ASSERT
>>    bool f = false;
>>    Method* m = k->lookup_method(vmSymbols::finalize_method_name(),
>>                                 vmSymbols::void_method_signature());
>>    if (m != NULL && !m->is_empty_method()) {
>>        f = true;
>>    }
>>    // Spec doesn't prevent agent from redefinition of empty finalizer.
>>    // Despite the fact that it's generally bad idea and redefined finalizer
>>    // will not work as expected we shouldn't abort vm in this case
>>    if (!k->has_been_redefined()) {
>>      assert(f == k->has_finalizer(), "inconsistent has_finalizer");
>>    }
>> #endif
>>
>> Also, please, note a couple of minor scratches in new comment:
>>   - finalyzer => finalizer
>>   - despite   => Despite
>>
>> Thanks,
>> Serguei
>>
>>
>> On 4/16/14 5:56 AM, Dmitry Samersoff wrote:
>>> Hi Everybody,
>>>
>>> Please review small changes.
>>>
>>> http://cr.openjdk.java.net/~dsamersoff/JDK-6904403/webrev.01/
>>>
>>> This fix tells to JVM to don't assert if the class was redefined.
>>>
>>> Please notice, these changes doesn't make redefined finalyzers working.
>>> It's a large project which is out of scope of this changes.
>>>
>>> -Dmitry
>>>
>



More information about the hotspot-runtime-dev mailing list