JNI ReleasePrimitiveArrayCritical with mode JNI_COMMIT shouldn't end critical region

Ian Rogers irogers at google.com
Tue Dec 5 23:15:29 UTC 2017


From:
https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#GetPrimitiveArrayCritical_ReleasePrimitiveArrayCritical

"The semantics of these two functions are very similar to the existing
Get/Release<primitivetype>ArrayElements functions. "

https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#Release_PrimitiveType_ArrayElements_routines

"JNI_COMMIT copy back the content but do not free the elems buffer"

Consider the pattern of:
GetPrimitiveArrayCritical(...)
ReleasePrimitiveArrayCritical(..., JNI_COMMIT)
ReleasePrimitiveArrayCritical(..., 0)

where the first release is to just achieve a copy back. For example,
jniCheck.cpp will copy back but not free a copy in the case of JNI_COMMIT
for a critical. The implementation of ReleasePrimitiveArrayCritical ignores
all arguments and so it ends the critical region even in the event of a
commit.

The attached patch makes ReleasePrimitiveArrayCritical consider the mode
argument when releasing the GCLocker.

Thanks,
Ian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hotspot.jni-release-critical-commit.patch
Type: text/x-patch
Size: 759 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/hotspot-dev/attachments/20171205/d686b685/hotspot.jni-release-critical-commit.patch>


More information about the hotspot-dev mailing list