On Fri, 4 Mar 2022 13:25:12 GMT, Zhengyu Gu <[email protected]> wrote:
> Please review this small patch that fixes a potential memory leak that
> exception return fails to release allocated `cacheDirs`
>
> Test:
>
> - [x] jdk_desktop on Linux x86_64
src/java.desktop/unix/native/common/awt/fontpath.c line 938:
> 936: while ((cnt < max) && (cacheDir =
> (*FcStrListNext)(cacheDirs))) {
> 937: jstr = (*env)->NewStringUTF(env, (const char*)cacheDir);
> 938: JNU_CHECK_EXCEPTION_AND_CLEANUP(env,
> (*FcStrListDone)(cacheDirs));
I think you do not need to create an additional macro here, just inline it and
call "(*FcStrListDone)(cacheDirs);" directly. Something like:
if (IS_NULL(jstr) {
(*FcStrListDone)(cacheDirs);
return;
}
Note that the "IS_NULL" is used in this file after NewStringUTF. Any objections?
src/java.desktop/unix/native/common/awt/fontpath.c line 940:
> 938: JNU_CHECK_EXCEPTION_AND_CLEANUP(env,
> (*FcStrListDone)(cacheDirs));
> 939:
> 940: (*env)->SetObjectArrayElement(env, cacheDirArray, cnt++,
> jstr);
Probably we should add the check+cleanup after the SetObjectArrayElement?
Otherwise, we may call NewStringUTF while an exception is raised by the
SetObjectArrayElement.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7691