RFR 8030115: [parfait] warnings from b119 for jdk.src.share.native.sun.tracing.dtrace: JNI exception pending

Jaroslav Bachorik jaroslav.bachorik at oracle.com
Thu Jul 24 11:07:29 UTC 2014


Please, review the change for the fix of the following problem

In jdk/src/share/native/sun/tracing/dtrace/JVM.c the following code is 
invoked in loop

198     for (i = 0; i < num_providers; ++i) {
199         JVM_DTraceProvider* p = &(jvm_providers[i]);
200         jobject provider = (*env)->GetObjectArrayElement(
201             env, providers, i);
202         readProviderData(env, provider, p);
203     }

The first problem is that GetGetObjectArrayElement() call on L200 may 
throw an exception which is not checked subsequently. On L202 the call 
to readProviderData() can also raise a Java exception without 
appropriate after-check. When getting back to the beginning of the loop 
GetObjectArrayElement() may be called with a pending exception which is 
deemed unsafe.

The fix extracts the inner part of the loop into a separate function 
where the result of each step is properly checked for pending 
exceptions. If there is a pending exception the loop will be 
interrupted, resources cleaned and 
Java_sun_tracing_dtrace_JVM_activate0() function will return 0 with the 
pending exception recorded in env.


Webrev: http://cr.openjdk.java.net/~jbachorik/8030115/webrev.00

Thanks,

-JB-


More information about the serviceability-dev mailing list