RFR 8226798: JVM crash in klassItable::initialize_itable_for_interface(int, InstanceKlass*, bool, Thread*)

Karen Kinnear karen.kinnear at oracle.com
Wed Jul 10 16:22:53 UTC 2019


Thank you for figuring out a fix for this. The code looks good for the fix. Thank you
for the assertions.

A suggestion on the code:

After the initial large loop, instead of if (!found_pkg_prvt_method) { do the check }
Replace that with

"If found_pkg_prvt_method is set, then the ONLY matching method in the
superclasses is package private in another package. That matching method will
prevent a miranda vtable entry from being created. Because the target method can not
override the package private method in another package, then it needs to be the root
for its own vtable entry."
  if (found_pkg_prvt_method) {
     return true;

Then leave the old code and comment alone.

Suggestion on the first set of comments:

“But, that package private method does “override” any matching methods in super interfaces,
so there will be no miranda vtable entry created. So, set flag to TRUE  for use below, in case there are no
methods in super classes that this target method overrides."

thank you so much,

> On Jul 10, 2019, at 8:09 AM, Harold Seigel <harold.seigel at oracle.com> wrote:
> Hi,
> Please review this JDK-14 fix for 8226798.  At class load time, the JVM was incorrectly calculating the size of a class's vtable in cases where a super class, in another package, contained a package private method that was also in a super interface.
> Open Webrev: http://cr.openjdk.java.net/~hseigel/bug_8226798/webrev/index.html
> JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8226798
> The fix was regression tested by running Mach5 tiers 1 and 2 tests and builds on Linux-x64, Solaris, Windows, and Mac OS X, by running Mach5 tiers 3-5 tests on Linux-x64, and JCK lang and VM tests on Linux-x64.
> Thanks, Harold

More information about the hotspot-runtime-dev mailing list