[10] Review Request: 8187442 Xcheck:jni produces various "WARNING in native method" in launcher
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Tue Sep 12 23:42:20 UTC 2017
On 9/12/17 16:03, David Holmes wrote:
> call. That is fine, but still leaves the problem that you are skipping
> the DeleteLocalRef call.
The leak was there before: if we will get an exception at
"1512 SetByteArrayRegion()"
then we never call this DeleteLocalRef().
I assumed it was done intentionally since this will be kind of "fatal"
error.
The same pattern is used in the other places for example in
NewPlatformStringArray:
jstring str = NewPlatformString(env, *strv++);
NULL_CHECK0(str);
(*env)->SetObjectArrayElement(env, ary, i, str);
(*env)->DeleteLocalRef(env, str);
>
> Thanks - and sorry again for my confusion on this.
>
> David
> -----
>
>>> In addition this does nothing to clear the pending exception so I can
>>> not see how it would affect any warnings.
>>
>> It does not clear an exception but preserve it instead, and does not
>> use the result of the method which produced an exception.
>>
>>>
>>> David
>>>
>>>> This value will be propagated to JavaMain() and I as far as
>>>> understand will stop the execution.
>>>>
>>>>
>>>> On 9/12/17 13:56, David Holmes wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> On 13/09/2017 5:18 AM, Sergey Bylokhov wrote:
>>>>>> Hello,
>>>>>> Please review the fix for jdk10/jdk10.
>>>>>>
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8187442
>>>>>> Webrev can be found at:
>>>>>> http://cr.openjdk.java.net/~serb/8187442/webrev.00
>>>>>
>>>>> This doesn't look right to me:
>>>>>
>>>>> str = (*env)->CallStaticObjectMethod(env, cls,
>>>>> makePlatformStringMID, USE_STDERR, ary);
>>>>> + CHECK_EXCEPTION_RETURN_VALUE(0);
>>>>> (*env)->DeleteLocalRef(env, ary);
>>>>> return str;
>>>>>
>>>>> If there is an exception pending you fail to delete the local ref.
>>>>> And there's no need to clear the exception before calling
>>>>> DeleteLocalRef as that is okay to call with a pending exception.
>>>>> But there is no point returning zero if an exception occurred
>>>>> because in that case str will already be 0/NULL.
>>>>>
>>>>> The same here:
>>>>>
>>>>> 1596 appClass = (*env)->CallStaticObjectMethod(env, cls, mid);
>>>>> 1597 CHECK_EXCEPTION_RETURN_VALUE(0);
>>>>> 1598 return appClass;
>>>>>
>>>>> If an exception is pending then appClass will be 0/NULL.
>>>>>
>>>>> In addition CHECK_EXCEPTION_RETURN_VALUE doesn't clear the pending
>>>>> exception so I can't see what warnings this would be clearing up ???
>>>>>
>>>>> Thanks,
>>>>> David
>>>>> -----
>>>>>
>>>>>> The simple application with empty main method produce some
>>>>>> "warnings" when Xcheck:jni is used. Because of that it is hard to
>>>>>> cleanup other parts of jdk from such warnings.
>>>>>>
>>>>>> Two additional checks were added, in both cases the new code will
>>>>>> return 0 in the same way as NULL_CHECK0 in the same methods.
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
--
Best regards, Sergey.
More information about the core-libs-dev
mailing list