Small fix that takes into account the remainder when assigning the size (see #10453) (#10491)

Motivation:

This is small fixes for #10453 PR according @njhill and @normanmaurer conversation.

Modification:

Simple refactor and takes into account remainder when calculate size.

Result:

Behavior is correct
This commit is contained in:
Andrey Mizurov 2020-08-21 10:18:48 +03:00 committed by GitHub
parent 0bbe4ce9fd
commit f51ae686c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -163,21 +163,21 @@ public abstract class AbstractDiskHttpData extends AbstractHttpData {
RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
fileChannel = accessFile.getChannel();
}
int totalWritten = 0;
int remaining = localsize;
long position = fileChannel.position();
int index = buffer.readerIndex();
while (totalWritten < localsize) {
int written = buffer.getBytes(index, fileChannel, position, localsize - totalWritten);
while (remaining > 0) {
int written = buffer.getBytes(index, fileChannel, position, remaining);
if (written < 0) {
break;
}
totalWritten += written;
remaining -= written;
position += written;
index += written;
}
fileChannel.position(position);
buffer.readerIndex(index);
size += localsize;
size += localsize - remaining;
} finally {
// Release the buffer as it was retained before and we not need a reference to it at all
// See https://github.com/netty/netty/issues/1516