RFR: 8296709: WARNING: JNI call made without checking exceptions [v5]
Kevin Walls
kevinw at openjdk.org
Mon Nov 14 14:57:04 UTC 2022
On Mon, 14 Nov 2022 14:19:48 GMT, Lutz Schmidt <lucy at openjdk.org> wrote:
>> This small change fixes a warning that may pop up during runtime. May I please request reviews? Thank you!
>
> Lutz Schmidt has updated the pull request incrementally with one additional commit since the last revision:
>
> 8296709: use multiple @run tags instead of multiple files
To see where the JNI local refs warning comes from, I set a breakpoint in JavaThread::print_stack_on as that is called when the warning happens, although it doesn't print anything as there is no Java frame.
...
(gdb) cont
Continuing.
WARNING: JNI local refs: 442, exceeds capacity: 32
Breakpoint 1, 0x00007ffff6efb8c0 in JavaThread::print_stack_on(outputStream*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
(gdb) bt
#0 0x00007ffff6efb8c0 in JavaThread::print_stack_on(outputStream*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#1 0x00007ffff6a0f38c in checked_jni_GetJavaVM () from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#2 0x00007ffff7e8dfa8 in transport_startTransport () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#3 0x00007ffff7e76f77 in startTransport () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#4 0x00007ffff7e75069 in bagEnumerateOver () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#5 0x00007ffff7e77948 in initialize () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#6 0x00007ffff7e783f0 in cbEarlyVMInit () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#7 0x00007ffff6b5e756 in JvmtiExport::post_vm_initialized() ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#8 0x00007ffff6f00f54 in Threads::create_vm(JavaVMInitArgs*, bool*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#9 0x00007ffff6a007d1 in JNI_CreateJavaVM () from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
...
Specifically breaking in JNIHandles::make_local I see a lot of activity like:
Breakpoint 2, 0x00007ffff6a240c4 in JNIHandles::make_local(oopDesc*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#0 0x00007ffff6a240c4 in JNIHandles::make_local(oopDesc*) () from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#1 0x00007ffff6b6d1ed in LoadedClassesClosure::do_klass(Klass*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#2 0x00007ffff66c6016 in ClassLoaderData::loaded_classes_do(KlassClosure*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#3 0x00007ffff66c9dd8 in ClassLoaderDataGraph::loaded_classes_do(KlassClosure*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#4 0x00007ffff6b6ce6f in JvmtiGetLoadedClasses::getLoadedClasses(JvmtiEnv*, int*, _jclass***) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#5 0x00007ffff6afa426 in jvmti_GetLoadedClasses () from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#6 0x00007ffff7e7561b in classTrack_initialize () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#7 0x00007ffff7e778f1 in initialize () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#8 0x00007ffff7e783f0 in cbEarlyVMInit () from /scratch/kwalls/jdk/jdk-17.0.3/lib/libjdwp.so
#9 0x00007ffff6b5e756 in JvmtiExport::post_vm_initialized() ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#10 0x00007ffff6f00f54 in Threads::create_vm(JavaVMInitArgs*, bool*) ()
from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
#11 0x00007ffff6a007d1 in JNI_CreateJavaVM () from /scratch/kwalls/jdk/jdk-17.0.3/lib/server/libjvm.so
...
LoadedClassesClosure::do_klass does indeed call make_local many times.
If this is the cause of the warning for >400 references, not sure how the code should know how many references to expect (the number of loaded classes..).
If I do make classTrack_initialize state it wants a large number of local references, that warning disappears:
$ git diff src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c b/src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c
index e3b30282daa..7dfb9ec01c4 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/classTrack.c
@@ -171,6 +171,7 @@ setupEvents()
void
classTrack_initialize(JNIEnv *env)
{
+ WITH_LOCAL_REFS(env, 500) {
trackingEnv = getSpecialJvmti();
if (trackingEnv == NULL) {
EXIT_ERROR(AGENT_ERROR_INTERNAL, "Failed to allocate tag-tracking jvmtiEnv");
@@ -201,4 +202,5 @@ classTrack_initialize(JNIEnv *env)
} else {
EXIT_ERROR(error,"loaded classes array");
}
+ } END_WITH_LOCAL_REFS(env)
}
```
-------------
PR: https://git.openjdk.org/jdk/pull/11083
More information about the serviceability-dev
mailing list