On Sat, 31 Jul 2021 17:33:50 GMT, Alan Bateman <al...@openjdk.org> wrote:

>>> Also can you can check that IllegalBlockingModeException is thrown for the 
>>> case ch is a SelectableChannel configured non-blocking and the destination 
>>> is a FileChannel?
>> 
>> Done in 
>> https://github.com/openjdk/jdk/pull/4263/commits/8e2889fd6138d8aa8e308a1cd2aea3546a7c43a7,
>>  but honestly I'd kindly like to ask for a brief explanation why this has to 
>> be done. What actual bad effect would happen if I do not throw?
>
>> The modified code found in 
>> [4b501b2](https://github.com/openjdk/jdk/commit/4b501b205c6f1c48bbc82d7a154aed3fc41b1a20)
>>  should be safe from infinite loops, as it checks the actual file length in 
>> each iteration (even if this costs us one more `synchronized` per iteration).
> 
> I need to look at it closely but I suspect this introduces a potential 
> overflow. Also if output stream is backed by a SocketChannel configured 
> non-blocking then FC::transferTo may return 0 so I assume there is a 
> potential infinite loop there too. I suspect the eventually patch will need 
> have to make use of the blockingLock to prevent the underlying channels from 
> being changed to non-blocking during the transfer.

@AlanBateman Did I recap the sum your comments correctly, is the above 
conclusion what you wanted to tell me? Shall I proceed with one of the two 
solutions outlined in the "...2:2 matrix..." section of my answer *or* shall I 
wait until you had a deeper look?

-------------

PR: https://git.openjdk.java.net/jdk/pull/4263

Reply via email to