RFR: 6445283: ProgressMonitorInputStream not large file aware (>2GB) [v2]
Prasanta Sadhukhan
psadhukhan at openjdk.org
Fri Jul 22 12:22:52 UTC 2022
On Fri, 22 Jul 2022 09:15:47 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
>> If ProgressMonitor has to show progress for reading file > 2GB, it goes to 100% and then again start from 0.
>> This is because
>> it uses "int" to store bytes read (`nread`) and when it reads data from file, it adds
>> "number-bytes-to-read "nr" to number-bytes-already-read "nread" variable [`nread += nr`] which can cause it to overflow and so "nread" becomes -ve.
>>
>> Fix is to check if adding bytes-to-read to number-bytes-already-read will exceed MAX_INT, then set Progress to max so that ProgressMonitor can close the tracker
>> https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/ProgressMonitor.java#L265
>>
>> No regression test is added as it involves using filesize of >2GB.
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
>
> Review comment
But it seems in.available() does not change when we read from the stream. For eg, if we read 512 bytes from stream, I would expect (2147483647 -512) bytes but I still see available() returns 2147483647 so this will not work AFICS
-------------
PR: https://git.openjdk.org/jdk/pull/9588
More information about the client-libs-dev
mailing list