Call onDispose before first read

The cancellation callback in asynchronousReadFileChannel must be called
before the first read I/O or otherwise if cancellation signals happens
immediately the onDispose callback may be missed.

The DefaultBufferFactory workaround however remains in place until an
expected additional fix arrives with Reactor Core 3.2.9.

See gh-22107
This commit is contained in:
Rossen Stoyanchev 2019-03-29 15:43:06 -04:00
parent 9a1bba5b67
commit 81f95efdbb
1 changed files with 1 additions and 1 deletions

View File

@ -144,10 +144,10 @@ public abstract class DataBufferUtils {
channel -> Flux.create(sink -> {
ReadCompletionHandler handler =
new ReadCompletionHandler(channel, sink, position, bufferFactoryToUse, bufferSize);
sink.onDispose(handler::dispose);
DataBuffer dataBuffer = bufferFactoryToUse.allocateBuffer(bufferSize);
ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, bufferSize);
channel.read(byteBuffer, position, dataBuffer, handler);
sink.onDispose(handler::dispose);
}),
channel -> {
// Do not close channel from here, rather wait for the current read callback