Hi Neil,

On 07/23/2014 03:50 PM, Neil Toda wrote:

I'm hoping some one will volunteer to be a 2d reviewer so we can satisfy jcheck requirement for a 2d
review for this 8u patch.

It is a very simple set of macros and a couple of applications that we hope to use going forward
in making sure that JNI exceptions are caught in the launcher.

http://cr.openjdk.java.net/~ntoda/8046545/webrev-02/

Thanks

Hmm. From a usability perspective, I think I would prefer to see something like CHECK_JNI_RETURN0 as the macro that appears on the java.c sources so that the code could contain lines like

1185 CHECK_JNI_RETURN0(makePlatformStringMID = (*env)->GetStaticMethodID(env, 1187 cls, "makePlatformString", "(Z[B)Ljava/lang/String;"));

rather than

1185                 CHECK_JNI_RETURN(
1186 makePlatformStringMID = (*env)->GetStaticMethodID(env, 1187 cls, "makePlatformString", "(Z[B)Ljava/lang/String;"),
1188                     RETURN0
1189                 );

My C macro skills are rusty, but isn't it recommended practice to define something like RETURN(N) as

 278 #define RETURN(N) return (N)

rather than

 278 #define RETURN(N) return N

to reduce the risk of bad things happening on the macro expansion of N?

-Joe


-neil

On 7/21/2014 9:31 AM, Neil Toda wrote:

Hi Kumar

Actually, the null check macros have different parameters. NCRV_return_value is an integer. RETURNVALUE in CHECK_JNI_RETURN is a macro, which allows us to have only the two macros:
CHECK_JNI_RETURN
and
CHECK_JNI_RETRUN_EXCEPTION

I also think it is cleaner since there are only two, and they are for JNI, to keep them self contained.

Would someone be willing to review webrev-02, which contain Kumar's suggested change in the
comments included with the macros.

Thanks

-neil


On 7/19/2014 8:02 AM, Kumar Srinivasan wrote:
[ Since I am sponsoring this patch, I think jcheck needs one more Reviewer besides myself]

Neil,

looking at your webrev: http://cr.openjdk.java.net/~ntoda/8046545/webrev-02/

Can we not re-use the existing macro for null check ?

#define NULL_CHECK_RETURN_VALUE(NCRV_check_pointer, NCRV_return_value)

so thus your new macro would become....

+#define CHECK_JNI_RETURN(JNIRETURN, RETURNVALUE) \
+    CHECK_JNI_RETURN_EXCEPTION(RETURNVALUE); \
-    do { \
-        if ((JNIRETURN) == NULL) { \
-            JLI_ReportErrorMessage(JNI_ERROR); \
-            RETURNVALUE; \
-        } \
-    } while (JNI_FALSE)
+    NULL_CHECK_RETURN_VALUE(JNI_RETURN, RETURN_VALUE);


Kumar

On 7/18/2014 10:40 AM, Neil Toda wrote:

Thanks Kumar.  Yes, misspoke here.  Will correct the comment.

On 7/18/2014 10:35 AM, Kumar Srinivasan wrote:
Neil,
The fix looks good. However there is an inaccuracy in the comment:

+ *  Normally, JNI calls do not return if an exception is thrown.
+ *  However, this behavior can change in the future,
+ *  so check for thrown exceptions.

This is not true, JNI calls *will* return if an exception is thrown, however best JNI practices dictate that a pending Exception(s) must be cleared or caught, before attempting another JNI call. Under such circumstances the return value will usually be an error or a null value. I suggest making this change to reflect this.

Thanks
Kumar



On 7/18/2014 9:53 AM, Neil Toda wrote:

Please review this launcher change.

Issue: https://bugs.openjdk.java.net/browse/JDK-8046545
webrev: http://cr.openjdk.java.net/~ntoda/8046545/webrev-01/

Summary:

Introduce a set of macros for launcher to be used to check for certain conditions after
return from select functions.








Reply via email to