RFR: 6478546: FileInputStream.read() throws OutOfMemoryError when there is plenty available [v3]
Alan Bateman
alanb at openjdk.org
Sun Jul 30 13:11:57 UTC 2023
On Fri, 28 Jul 2023 19:59:15 GMT, Brian Burkhalter <bpb at openjdk.org> wrote:
>> Limit native memory allocation and move write loop from the native layer into Java. This change should make the OOME reported in the issue much less likely.
>
> Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
>
> 6478546: Move buffer clamping up to Java layer; correct read behavior to match legacy
src/java.base/share/classes/java/io/FileInputStream.java line 257:
> 255: try {
> 256: do {
> 257: int size = Math.min(remaining, 1572864);
1.5Mb seems high, I think we really need micro that do real file I/O to help tune this.
src/java.base/share/classes/java/io/FileOutputStream.java line 347:
> 345: pos += n;
> 346: remaining -= n;
> 347: } while (remaining > 0);
Long standing behavior is that write is a no-open with len is 0, meaning you can do while here (no need to change it to do-while). Same thing in RAF.
src/java.base/share/native/libjava/io_util.c line 160:
> 158: }
> 159:
> 160: if (outOfBounds(env, off, len, bytes)) {
I assume the IS_NULL and outOfBounds checking in both readBytes and writeBytes are redundant now.
src/java.base/share/native/libjava/io_util.c line 183:
> 181: if (fd == -1) {
> 182: JNU_ThrowIOException(env, "Stream Closed");
> 183: nwritten = -1;
nwritten is initialized to -1.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14981#discussion_r1278565903
PR Review Comment: https://git.openjdk.org/jdk/pull/14981#discussion_r1278565565
PR Review Comment: https://git.openjdk.org/jdk/pull/14981#discussion_r1278563940
PR Review Comment: https://git.openjdk.org/jdk/pull/14981#discussion_r1278564255
More information about the security-dev
mailing list