java.lang.Error: java.lang.NoSuchFieldException: tid

151 views
Skip to first unread message

Xuan Bach

unread,
Jan 24, 2017, 1:57:57 AM1/24/17
to Java™ Pathfinder
Hi all,

I am running into the following issue when using JPF to run on an application (named grizzly) that uses java.util.concurrent.locks
Errors reported by JPF is as below. Note that If I run the example on normal JVM, it runs fine.
Anyone knows anything may cause this problem? Any solutions? Thanks a lot!

Bach.

==================================================ERROR by JPF======================
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.Error: java.lang.NoSuchFieldException: tid
    at java.util.concurrent.locks.ReentrantReadWriteLock.<clinit>(ReentrantReadWriteLock.java:1506)
    at org.glassfish.grizzly.utils.StateHolder.<init>(StateHolder.java:85)
    at org.glassfish.grizzly.AbstractTransport.<init>(AbstractTransport.java:158)
    at org.glassfish.grizzly.nio.NIOTransport.<init>(NIOTransport.java:69)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.<init>(TCPNIOTransport.java:161)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.<init>(TCPNIOTransport.java:157)
    at java.lang.Class.newInstance(gov.nasa.jpf.vm.JPF_java_lang_Class)
    at org.glassfish.grizzly.NIOTransportBuilder.<init>(NIOTransportBuilder.java:96)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder.<init>(TCPNIOTransportBuilder.java:64)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder.newInstance(TCPNIOTransportBuilder.java:75)
    at org.glassfish.grizzly.AsyncWriteQueueStubTest.createTransport(AsyncWriteQueueStubTest.java:68)
    at org.glassfish.grizzly.AsyncWriteQueueStubTest.testStubAsyncWriteQueueReentrants(AsyncWriteQueueStubTest.java:457)
    at org.glassfish.grizzly.CustomUnitTestCaller.main(CustomUnitTestCaller.java:21)
Caused by: java.lang.NoSuchFieldException: tid
    at java.lang.Class.getDeclaredField(gov.nasa.jpf.vm.JPF_java_lang_Class)
    at java.util.concurrent.locks.ReentrantReadWriteLock.<clinit>(ReentrantReadWriteLock.java:1504)
    at org.glassfish.grizzly.utils.StateHolder.<init>(StateHolder.java:85)
    at org.glassfish.grizzly.AbstractTransport.<init>(AbstractTransport.java:158)
    at org.glassfish.grizzly.nio.NIOTransport.<init>(NIOTransport.java:69)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.<init>(TCPNIOTransport.java:161)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.<init>(TCPNIOTransport.java:157)
    at java.lang.Class.newInstance(gov.nasa.jpf.vm.JPF_java_lang_Class)
    at org.glassfish.grizzly.NIOTransportBuilder.<init>(NIOTransportBuilder.java:96)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder.<init>(TCPNIOTransportBuilder.java:64)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder.newInstance(TCPNIOTransportBuilder.java:75)
    at org.glassfish.grizzly.AsyncWriteQueueStubTest.createTransport(AsyncWriteQueueStubTest.java:68)
    at org.glassfish.grizzly.AsyncWriteQueueStubTest.testStubAsyncWriteQueueReentrants(AsyncWriteQueueStubTest.java:457)

jda...@redhat.com

unread,
Apr 7, 2017, 4:37:33 AM4/7/17
to Java™ Pathfinder
On Tuesday, January 24, 2017 at 7:57:57 AM UTC+1, Xuan Bach wrote:
Hi all,

I am running into the following issue when using JPF to run on an application (named grizzly) that uses java.util.concurrent.locks
Errors reported by JPF is as below. Note that If I run the example on normal JVM, it runs fine.
Anyone knows anything may cause this problem? Any solutions? Thanks a lot!

Hello Xuan Bach,

I was getting the same exception when running JPF on Apache ActiveMQ Artemis and I believe I managed to get past it


gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.Error: java.lang.NoSuchFieldException: tid

at java.util.concurrent.locks.ReentrantReadWriteLock.<clinit>(ReentrantReadWriteLock.java:1506)
at org.apache.logging.log4j.status.StatusLogger.<init>(StatusLogger.java:67)
at org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:61)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:52)
at java.lang.Class.initialize0(gov.nasa.jpf.vm.JPF_java_lang_Class)
at java.lang.Class.forName(Class.java:229)
at org.jboss.logging.LoggerProviders.tryLog4j2(LoggerProviders.java:125)
at org.jboss.logging.LoggerProviders.findProvider(LoggerProviders.java:91)
at org.jboss.logging.LoggerProviders.find(LoggerProviders.java:34)
at org.jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:31)
at org.jboss.logging.Logger.getLogger(Logger.java:2465)
at org.jboss.logging.Logger.getLogger(Logger.java:2490)
at org.apache.activemq.artemis.tests.util.ActiveMQTestBase.<clinit>(ActiveMQTestBase.java:160)
at java.lang.Class.forName(gov.nasa.jpf.vm.JPF_java_lang_Class)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:86)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
Caused by: java.lang.NoSuchFieldException: tid
at java.lang.Class.getDeclaredField(gov.nasa.jpf.vm.JPF_java_lang_Class)
at java.util.concurrent.locks.ReentrantReadWriteLock.<clinit>(ReentrantReadWriteLock.java:1504)
at org.apache.logging.log4j.status.StatusLogger.<init>(StatusLogger.java:67)
at org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:61)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:52)
at java.lang.Class.initialize0(gov.nasa.jpf.vm.JPF_java_lang_Class)
at java.lang.Class.forName(Class.java:229)
at org.jboss.logging.LoggerProviders.tryLog4j2(LoggerProviders.java:125)
at org.jboss.logging.LoggerProviders.findProvider(LoggerProviders.java:91)
at org.jboss.logging.LoggerProviders.find(LoggerProviders.java:34)
at org.jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:31)
at org.jboss.logging.Logger.getLogger(Logger.java:2465)
at org.jboss.logging.Logger.getLogger(Logger.java:2490)
at org.apache.activemq.artemis.tests.util.ActiveMQTestBase.<clinit>(ActiveMQTestBase.java:160)
at java.lang.Class.forName(gov.nasa.jpf.vm.JPF_java_lang_Class)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:86)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)

If I look at in OpenJDK 8 sources, I see in ReentrantReadWriteLock.java:1506


// Unsafe mechanics
private static final sun.misc.Unsafe UNSAFE;
private static final long TID_OFFSET;
static {
try {
UNSAFE = sun.misc.Unsafe.getUnsafe();
Class<?> tk = Thread.class;
TID_OFFSET
= UNSAFE.objectFieldOffset
(tk.getDeclaredField("tid"));
} catch (Exception e) {
throw new Error(e);
}
       }




If I open the Thread class in jpf-core, I do not see the field tid there.

To resolve this, I've edited the jpf-core sources and added


private long tid;

declaration to class Thread in jpf-core/src/classes/java/lang/Thread.java



Next, I encountered the following error.


gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.NoSuchMethodError: java.lang.Exception$SecurityManagerEx.getClassContext()[Ljava/lang/Class;

at java.lang.Exception$SecurityManagerEx.getThrowableContext(Exception.java:147)
at java.lang.Exception.<init>(Exception.java:37)
at java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:75)
at java.lang.ClassNotFoundException.<init>(ClassNotFoundException.java:82)
at java.lang.ClassLoader.findClass(ClassLoader.java:191)
at java.lang.ClassLoader.loadClass(ClassLoader.java:175)
at java.lang.Class.forName(Class.java:225)
at org.jboss.logging.Logger$1.run(Logger.java:2544)
at java.security.AccessController.doPrivileged(AccessController.java:34)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
at org.apache.activemq.artemis.core.server.ActiveMQServerLogger.<clinit>(ActiveMQServerLogger.java:78)
at org.apache.activemq.artemis.tests.util.ActiveMQTestBase.<clinit>(ActiveMQTestBase.java:179)
at java.lang.Class.forName(gov.nasa.jpf.vm.JPF_java_lang_Class)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:86)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)


To resolve that, I again edited jpf-core sources and created new file src/classes/java/lang/SecurityManager.java


public class SecurityManager {
 
protected Class[] getClassContext() {
 
return new Class[0];
 
}
}

  

Now the unittest class runs to completion.


I am executing the unittests by running


java -jar ~/workspace/jpf-core/build/RunJPF.jar +classpath=`find . -name "*.jar" | tr :space: :` org.junit.runner.JUnitCore org.apache.activemq.artemis.tests.integration.amqp.ProtonTest


before I had to execute mvn install dependency:copy-dependencies in order to get all transitive dependencies copied into one directory 

Xuan Bach Le Dinh

unread,
May 15, 2017, 1:53:04 AM5/15/17
to Java™ Pathfinder
Hello,

Thanks a lot for your detailed and helpful suggestion!

Have a great day.

Bach.
Reply all
Reply to author
Forward
0 new messages