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

Daniil Titov daniil.x.titov at oracle.com
Tue Apr 30 20:28:51 UTC 2019


Thank you, Dean, JC, Chris, and Serguei, for reviewing this change!

 

Best regards,

Daniil

 

 

 

From: Chris Plummer <chris.plummer at oracle.com>
Date: Tuesday, April 30, 2019 at 11:39 AM
To: Daniil Titov <daniil.x.titov at oracle.com>
Subject: Re: FW: 8222821: com/sun/jdi/ExceptionEvents.java failed

 

Looks good.

Chris



 

 

From: serviceability-dev <serviceability-dev-bounces at openjdk.java.net> on behalf of Jean Christophe Beyler <jcbeyler at google.com>
Date: Thursday, April 25, 2019 at 7:38 PM
To: <dean.long at oracle.com>
Cc: OpenJDK Serviceability <serviceability-dev at openjdk.java.net>
Subject: Re: RFR: 8222821: com/sun/jdi/ExceptionEvents.java failed

 

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> 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)
>
> 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/
> 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/17cea7c0/attachment-0001.html>
-------------- next part --------------
An embedded message was scrubbed...
From: serguei.spitsyn at oracle.com
Subject: Re: RFR: 8222821: com/sun/jdi/ExceptionEvents.java failed
Date: Tue, 30 Apr 2019 11:26:10 -0700
Size: 27453
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20190430/17cea7c0/attachment-0001.mht>


More information about the serviceability-dev mailing list