This is already primarily a runtime change with some GC test changes and
serviceability test changes AFAICS!
David
On 18/11/2018 5:16 pm, Chris Plummer wrote:
Hi JC,
I'll try to take a look early this week. Won't this eventually affect
non-svc tests? If so, I think the general mechanism should be reviewed
by a wider audience.
cheers,
Chris
On 11/16/18 7:43 PM, JC Beyler wrote:
Hi all,
Anybody motivated to review this? :)
Jc
On Wed, Nov 7, 2018 at 9:53 PM JC Beyler <jcbey...@google.com
<mailto:jcbey...@google.com>> wrote:
Hi all,
Could I have a review for the extension and usage of the
ExceptionJniWrapper. This adds lines and filenames to the end of
the wrapper JNI methods, adds tracing, and throws an error if need
be. I've ported the gc/lock files to use the new TRACE_JNI_CALL
add-on and I've ported a few of the tests that were already
changed for the assignment webrev for JDK-8212884.
Webrev: http://cr.openjdk.java.net/~jcbeyler/8213501/webrev.00/
<http://cr.openjdk.java.net/%7Ejcbeyler/8213501/webrev.00/>
Bug: https://bugs.openjdk.java.net/browse/JDK-8213501
For illustration, if I force an error to the AP04/ap04t03 test and
set the verbosity on, I get something like:
>> Calling JNI method FindClass from ap04t003.cpp:343
>> Calling with these parameter(s):
java/lang/Threadd
Wait for thread to finish
<< Called JNI method FindClass from ap04t003.cpp:343
Exception in thread "Thread-0" java.lang.NoClassDefFoundError:
java/lang/Threadd
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003.runIterateOverHeap(Native
Method)
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003HeapIterator.runIteration(ap04t003.java:140)
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003Thread.run(ap04t003.java:201)
Caused by: java.lang.ClassNotFoundException: java.lang.Threadd
at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at
java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 3 more
FATAL ERROR in native method: JNI method FindClass : internal
error from ap04t003.cpp:343
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003.runIterateOverHeap(Native
Method)
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003HeapIterator.runIteration(ap04t003.java:140)
at
nsk.jvmti.scenarios.allocation.AP04.ap04t003Thread.run(ap04t003.java:201)
Questions/comments I have about this are:
- Do we want to force fatal errors when a JNI call fails in
general? Most of these tests do the right thing and test the
return of the JNI calls, for example:
thrClass = jni->FindClass("java/lang/Threadd", TRACE_JNI_CALL);
if (thrClass == NULL) {
but now the wrapper actually would do a fatal if the FindClass
call would return a nullptr, so we could remove that test
altogether. What do you think?
- I prefer to leave them as the tests then become closer to
what real users would have in their code and is the "recommended"
way of doing it
- The alternative is to use the NonFatalError I added which
then just prints out that something went wrong, letting the test
continue. Question will be what should be the default? The fatal
or the non-fatal error handling?
On a different subject:
- On the new tests, I've removed the NSK_JNI_VERIFY since the
JNI wrapper handles the tracing and the verify in almost the same
way; only difference I can really tell is that the complain method
from NSK has a max complain before stopping to "complain"; I have
not added that part of the code in this webrev
Once we decide on these, I can continue on the files from
JDK-8212884 and then do both the assignment in an if extraction
followed-by this type of webrev in an easier fashion. Depending on
decisions here, NSK*VERIFY can be deprecated as well as we go forward.
Thank you for the reviews/comments :)
Jc
--
Thanks,
Jc