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
Wed Apr 16 22:56:16 UTC 2014


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
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20140416/d6710f7b/attachment.html>


More information about the hotspot-runtime-dev mailing list