Description: |
Brian Griffin has uncovered this, and it's been dissected in several
messages on the TCLCORE mailing list.
Any time the DoRead() routine acts so that the state of the input
buffers on the channel toggles between EMPTY or NOT-EMPTY,
there must be a call to UpdateInterest() to get the notifier and
file event machinery to function properly. This has been broken
for about a year, where there is no call to UpdateInterest() in
the case where a read of exactly the number of bytes requested
also has the effect of precisely emptying the buffer.
The fix is easy, will commit it to a branch shortly. I hold back
putting it on the main branches only briefly because I'm
attempting to devise a test of the matter to go in the test suite.
|