Fix memory leak in HttpPostMultipartRequestDecoder (#10227)
Motivation: We need to release all ByteBufs that we allocate to prevent leaks. We missed to release the ByteBufs that are used to aggregate in two cases Modifications: Add release() calls Result: No more memory leak in HttpPostMultipartRequestDecoder
This commit is contained in:
parent
6cd193e83f
commit
987a68eb02
@ -989,9 +989,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
*/
|
*/
|
||||||
private static String readLineStandard(ByteBuf undecodedChunk, Charset charset) {
|
private static String readLineStandard(ByteBuf undecodedChunk, Charset charset) {
|
||||||
int readerIndex = undecodedChunk.readerIndex();
|
int readerIndex = undecodedChunk.readerIndex();
|
||||||
|
ByteBuf line = buffer(64);
|
||||||
try {
|
try {
|
||||||
ByteBuf line = buffer(64);
|
|
||||||
|
|
||||||
while (undecodedChunk.isReadable()) {
|
while (undecodedChunk.isReadable()) {
|
||||||
byte nextByte = undecodedChunk.readByte();
|
byte nextByte = undecodedChunk.readByte();
|
||||||
if (nextByte == HttpConstants.CR) {
|
if (nextByte == HttpConstants.CR) {
|
||||||
@ -1014,6 +1013,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException(e);
|
throw new NotEnoughDataDecoderException(e);
|
||||||
|
} finally {
|
||||||
|
line.release();
|
||||||
}
|
}
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException();
|
throw new NotEnoughDataDecoderException();
|
||||||
@ -1033,9 +1034,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
}
|
}
|
||||||
SeekAheadOptimize sao = new SeekAheadOptimize(undecodedChunk);
|
SeekAheadOptimize sao = new SeekAheadOptimize(undecodedChunk);
|
||||||
int readerIndex = undecodedChunk.readerIndex();
|
int readerIndex = undecodedChunk.readerIndex();
|
||||||
|
ByteBuf line = buffer(64);
|
||||||
try {
|
try {
|
||||||
ByteBuf line = buffer(64);
|
|
||||||
|
|
||||||
while (sao.pos < sao.limit) {
|
while (sao.pos < sao.limit) {
|
||||||
byte nextByte = sao.bytes[sao.pos++];
|
byte nextByte = sao.bytes[sao.pos++];
|
||||||
if (nextByte == HttpConstants.CR) {
|
if (nextByte == HttpConstants.CR) {
|
||||||
@ -1062,6 +1062,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException(e);
|
throw new NotEnoughDataDecoderException(e);
|
||||||
|
} finally {
|
||||||
|
line.release();
|
||||||
}
|
}
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException();
|
throw new NotEnoughDataDecoderException();
|
||||||
|
Loading…
Reference in New Issue
Block a user