RFR: JDK-8057057: Cleanup DIO JNI code
Alexey Konstantinov
alexey.konstantinov at oracle.com
Wed Sep 3 14:59:56 UTC 2014
Hi Jen,
I agree with your comments. The changes look fine to me then.
Thanks,
Alexey
----- Original Message -----
From: jen.dority at oracle.com
To: dio-dev at openjdk.java.net
Sent: Tuesday, September 2, 2014 10:08:37 PM GMT +04:00 Abu Dhabi / Muscat
Subject: Re: RFR: JDK-8057057: Cleanup DIO JNI code
On 9/2/2014 1:45 PM, Alexey Konstantinov wrote:
> Hi Jen,
>
> jni_i2c.cpp:
> 55 jfieldID addressID = deviceNumberID ?
> 56 env->GetFieldID(configClass, "address", "I") :
> 57 NULL;
> 58 jint address = addressID ?
> 59 env->GetIntField(config, addressID) :
> 60 0;
> 61
> 62 jfieldID addressSizeID = addressID ?
> 63 env->GetFieldID(configClass, "addressSize", "I") :
> 64 NULL;
> 65 jint addressSize = addressSizeID ?
> 66 env->GetIntField(config, addressSizeID) :
> 67 0;
> Looks like in line 62 address should be tested instead of addressID.
I disagree. The address field is just an int so it is perfectly
acceptable for its value to be 0. It's the fieldIDs being NULL that is
significant.
>
> jni_i2c.cpp:
> 84 device_reference device = INVALID_DEVICE_REFERENCE;
> 85 if (result == JAVACALL_DIO_OK) {
> 86 device = createDeviceReference(handle, _i2c_close,
> 87 javacall_i2c_lock,
> javacall_i2c_unlock);
> 88 if (device == INVALID_DEVICE_REFERENCE) {
> 89 javacall_i2c_close(handle);
> 90 result = JAVACALL_DIO_OUT_OF_MEMORY;
> 91 } else {
> 92 result = saveDeviceReferenceToDeviceObject(env,
> obj, device);
> 93 }
> 94 }
> 95 }
> 96
> 97 if (env->ExceptionCheck() != JNI_TRUE) {
> 98 checkJavacallFailure(env, result);
> 99 }
> Would you agree with that the implementation would be even more robust
> if there were a call to javacall_i2c_close(handle) to handle an
> exception that might happen in line 92?
Technically, yes. But I think that's a step to far along the road of
trying to recover and so kind of outside the scope of these changes. The
purpose of this changeset is to avoid calling JNI functions while an
exception is pending as that behavior usually results in native crashes.
What yuou're pointing out is a separate, existing weakness possibly
present in other areas. As such, I'd prefer to address it in a separate
JIRA issue & patch.
Jen
>
> Thanks,
> Alexey
>
> On 9/2/2014 8:08 PM, Jen Dority wrote:
>> issue: https://bugs.openjdk.java.net/browse/JDK-8057057
>> webrev: http://cr.openjdk.java.net/~jld/8057057/
>>
>> Hi All,
>>
>> Need a review for a bunch of JNI fixes. The code was missing
>> Exception/NULL checks in a bunch of key places and I even found a
>> missing return value.
>>
>> Thanks,
>> Jen
>
More information about the dio-dev
mailing list