Closed
Description
David Terk opened SPR-17268 and commented
Recently there was a fix that addressed some potential memory leaks if there were errors in the response to the Webclient. Fix is here
If using exchange() what is the proper way to dispose of a response? Can leaks still occur on bodyToMono(String.class) ? Trying to understand if this fix was specific to cases where bytebuffers are used e.g.
return join(response.body(BodyExtractors.toDataBuffers()))
.map(dataBuffer -> {
byte[] bytes = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(bytes);
DataBufferUtils.release(dataBuffer);
return bytes;
}).then();
or everywhere.
The above snippet is used directly in WebClients default error handler - so would like to know if this is the only "safe" way to deal with disposing a response if a non 200 status code has taken place after using exchange.
Affects: 5.0.8
Reference URL: #21563
Issue Links:
- DataBufferUtils#join could leak buffers in case of error from the source [SPR-17025] #21563 DataBufferUtils#join could leak buffers in case of error from the source