RFR (S) 8043224: -Xcheck:jni improvements to exception checking and excessive local refs

harold seigel harold.seigel at oracle.com
Tue Jun 3 19:51:26 UTC 2014


Hi David,

The changes look good.  The copyright is old in jniHandles.hpp.

Also, would it be better to say "Method", instead of "MethodV", in calls 
to set_pending_jni_exception_check() for methods without MethodV in 
their names, like these:

      865 JNI_ENTRY_CHECKED(ResultType,  \
      866 *checked_jni_Call##Result##Method*(JNIEnv *env, \
      867                                    jobject obj, \
      868                                    jmethodID methodID, \
      869                                    ...)) \
      870     functionEnter(thr); \
      871     va_list args; \
      872     IN_VM( \
      873       jniCheck::validate_call_object(thr, obj, methodID); \
      874     ) \
      875     va_start(args,methodID); \
      876     ResultType result =UNCHECKED()->Call##Result##MethodV(env,
    obj, methodID, \
      877 args); \
      878     va_end(args); \
      879    
    thr->set_pending_jni_exception_check("*Call"#Result"MethodV*"); \
      880     functionExit(thr); \
      881     return result; \
      882 JNI_END \


    1048 JNI_ENTRY_CHECKED(void,
    1049 *checked_jni_CallNonvirtualVoidMethod*(JNIEnv *env,
    1050                                        jobject obj,
    1051                                        jclass clazz,
    1052                                        jmethodID methodID,
    1053                                        ...))
    1054     functionEnter(thr);
    1055     va_list args;
    1056     IN_VM(
    1057       jniCheck::validate_call_object(thr, obj, methodID);
    1058       jniCheck::validate_call_class(thr, clazz, methodID);
    1059     )
    1060     va_start(args,methodID);
    1061
    UNCHECKED()->CallNonvirtualVoidMethodV(env,obj,clazz,methodID,args);
    1062     va_end(args);
    1063    
    thr->set_pending_jni_exception_check("*CallNonvirtualVoidMethodV*");
    1064     functionExit(thr);
    1065 JNI_END

This would differentiate the messages from the messages in their sister 
methods that have MethodV in their names.

Thanks, Harold


On 5/28/2014 12:06 PM, Zhengyu Gu wrote:
> Looks good.
>
> -Zhengyu
>
> On 5/15/2014 7:55 AM, David Simms wrote:
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8043224
>>
>> Web review: http://cr.openjdk.java.net/~dsimms/8043224/
>>
>> Check JNI:
>>
>> 1) Functions that require exception checks now set a flag. JNI 
>> exception checks clear said flag. Functions which do not allow 
>> exceptions now check the flag and warn if the programmer has failed 
>> to check for exceptions. Said flag is actually the name of the 
>> function requiring an exception check.
>>
>> 2) JNI function exit now check and warn if the number of local 
>> reference exceed the "planned number of references", i.e exceed 
>> initial frame capacity, "pushlocalframe" capacity or 
>> "ensurelocalcapacity".
>>
>> Testing:
>>
>>  * jtreg, quick vm tests
>>  * Hand rolled test run locally (no support of JNI in test libs...will
>>    hold until there is support).
>>
>>
>> Cheers
>> /David Simms
>



More information about the hotspot-runtime-dev mailing list