RFR: 8222821: com/sun/jdi/ExceptionEvents.java failed

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Tue Apr 30 18:26:10 UTC 2019


Hi Daniil,

Looks good to me.

Thanks,
Serguei


On 4/25/19 7:37 PM, Jean Christophe Beyler wrote:
> Hi Daniil,
>
> Looks good to me too, (thanks for the detailed explanation about the 
> test failure btw :-)),
> Jc
>
> On Thu, Apr 25, 2019 at 6:43 PM <dean.long at oracle.com 
> <mailto:dean.long at oracle.com>> wrote:
>
>     Looks good.
>
>     dl
>
>     On 4/25/19 6:33 PM, Daniil Titov wrote:
>     > Please review the change that fixes an intermittent failure of
>     the test when running with Graal on.
>     >
>     > The test creates exception requests for different kinds of
>     exceptions and errors, starts the debuggee that throws an
>     exception, and listens for exception events. If the number of
>     received exception events is not equal to 1 the test fails. For
>     the case when the exception request is created for java.lang.Error
>     class  the test intermittently fails if Graal is on. It happens
>     because, sometimes, in addition to StackOverflowError thrown by
>     the test itself, jdk.vm.ci.common.JVMCIError is thrown from method
>     getField() in class jdk.vm.ci.hotspot .HotSpotVMConfigAccess at
>     line 252
>     (src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfigAccess.java
>     <http://jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfigAccess.java>)
>     >
>     > 240       private VMField getField(String name, String cppType,
>     boolean required) {
>     >     241               VMField entry = store.vmFields.get(name);
>     >     242               if (entry == null) {
>     >     243                   if (!required) {
>     >     244                       return null;
>     >     245                   }
>     >     246                   store.printConfig();
>     >     247                   throw new JVMCIError("expected VM
>     field not found in " + store + ": " + name);
>     >     248               }
>     >     249
>     >     250               // Make sure the native type is still the
>     type we expect.
>     >     251               if (cppType != null &&
>     !cppType.equals(entry.type)) {
>     >     252                   throw new JVMCIError("expected type "
>     + cppType + " but VM field " + name + " is of type " + entry.type);
>     >     253               }
>     >     254               return entry;
>     >     255           }
>     >
>     > that in one case is caught at line 412 in
>     src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java
>     >
>     >     404           public final int pendingFailedSpeculationOffset;
>     >     405           {
>     >     406               String name =
>     "JavaThread::_pending_failed_speculation";
>     >     407               int offset = -1;
>     >     408               try {
>     >     409                   offset = getFieldOffset(name,
>     Integer.class, "jlong");
>     >     410               } catch (JVMCIError e) {
>     >     411                   try {
>     >     412                       offset = getFieldOffset(name,
>     Integer.class, "long");
>     >     413                   } catch (JVMCIError e2) {
>     >     414                   }
>     >     415               }
>     >     416               if (offset == -1) {
>     >     417                   throw new JVMCIError("cannot get
>     offset of field " + name + " with type long or jlong");
>     >     418               }
>     >     419               pendingFailedSpeculationOffset = offset;
>     >     420           }
>     >
>     > and in other case at line 229 in the same class
>     (src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java)
>     >
>     > 221       public final int classMirrorOffset;
>     >     222           {
>     >     223               String name = "Klass::_java_mirror";
>     >     224               int offset = -1;
>     >     225               boolean isHandle = false;
>     >     226               try {
>     >     227                   offset = getFieldOffset(name,
>     Integer.class, "oop");
>     >     228               } catch (JVMCIError e) {
>     >     229
>     >     230               }
>     >     231               if (offset == -1) {
>     >     232                   try {
>     >     233                       offset = getFieldOffset(name,
>     Integer.class, "jobject");
>     >     234                       isHandle = true;
>     >     235                   } catch (JVMCIError e) {
>     >     236                       try {
>     >     237                           // JDK-8186777
>     >     238                           offset = getFieldOffset(name,
>     Integer.class, "OopHandle");
>     >     239                           isHandle = true;
>     >     240                       } catch (JVMCIError e2) {
>     >     241                       }
>     >     242                   }
>     >     243               }
>     >     244               if (offset == -1) {
>     >     245                   throw new JVMCIError("cannot get
>     offset of field " + name + " with type oop, jobject or OopHandle");
>     >     246               }
>     >     247               classMirrorOffset = offset;
>     >     248               classMirrorIsHandle = isHandle;
>     >     249           }
>     >
>     > That results in the number of received exception events exceeds
>     1 and the test fails.
>     >
>     > To ignore these unexpected events the fix adds
>     "jdk.vm.ci.hotspot.*"  class exclusion filter when it creates an
>     exception request.
>     >
>     > Webrev: http://cr.openjdk.java.net/~dtitov/8222821/webrev.01/
>     <http://cr.openjdk.java.net/%7Edtitov/8222821/webrev.01/>
>     > Bug: https://bugs.openjdk.java.net/browse/JDK-8222821
>     >
>     > Thanks!
>     > -Daniil
>     >
>     >
>     >
>
>
>
> -- 
>
> Thanks,
> Jc

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20190430/0f2512e6/attachment-0001.html>


More information about the serviceability-dev mailing list