On Fri, 19 Mar 2021 22:31:48 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
>> If `JNU_NewStringPlatform` fails to allocate new Java String object for >> printer name, `std::bad_alloc` is thrown. The handler for the exception does >> not release the local reference to the `nameArray`, thus it will be leaked. > > src/java.desktop/windows/native/libawt/windows/WPrinterJob.cpp line 178: > >> 176: } catch (std::bad_alloc&) { >> 177: delete [] pPrinterEnum; >> 178: if (nameArray != NULL) { > > Not sure that we usually clean the local refs in the native JNI methods, that > only required in the native loop which are never returned to the java(I have > check that by the grep of env->NewObjectArray) You're right. It's not required: all local refs are cleared when the JNI method exits. My reasoning was that `env->DeleteLocalRef(utf_str)` is called in the loop. Strictly, it's not required either. Yet if there's a large number of elements in the array, it could cause a problem. I'm going to withdraw the PR as the fix is not necessary. ------------- PR: https://git.openjdk.java.net/jdk/pull/3096