diff options
author | dgp <dgp@users.sourceforge.net> | 2014-08-22 13:44:23 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2014-08-22 13:44:23 (GMT) |
commit | 2ad50fb7c02f82eac6d9dc2ca5b4aeec742d38d7 (patch) | |
tree | 77909ebaf683c36a6784559fc6a711c941cb86e1 /generic | |
parent | 78ccd5e19e769a8b4736728372c8c8b24f34e384 (diff) | |
parent | 7b2b44f56169a915474820a5d7ed5dad0016c1c2 (diff) | |
download | tcl-2ad50fb7c02f82eac6d9dc2ca5b4aeec742d38d7.zip tcl-2ad50fb7c02f82eac6d9dc2ca5b4aeec742d38d7.tar.gz tcl-2ad50fb7c02f82eac6d9dc2ca5b4aeec742d38d7.tar.bz2 |
merge 8.5; stamp release date
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclIO.c | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c index afffeb8..93ac937 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -7716,7 +7716,7 @@ Tcl_NotifyChannel( if ((chPtr->mask & mask) != 0) { nh.nextHandlerPtr = chPtr->nextPtr; - (*(chPtr->proc))(chPtr->clientData, mask); + (*(chPtr->proc))(chPtr->clientData, chPtr->mask & mask); chPtr = nh.nextHandlerPtr; } else { chPtr = chPtr->nextPtr; @@ -8853,34 +8853,22 @@ DoRead( break; } - /* If there is no full buffer, attempt to create and/or fill one. */ - - while (!IsBufferFull(bufPtr)) { - int code; + /* + * If there is not enough data in the buffers to possibly + * complete the read, then go get more. + */ + if (bufPtr == NULL || BytesLeft(bufPtr) < bytesToRead) { moreData: - code = GetInput(chanPtr); - bufPtr = statePtr->inQueueHead; - - assert (bufPtr != NULL); - - if (GotFlag(statePtr, CHANNEL_EOF|CHANNEL_BLOCKED)) { - /* Further reads cannot do any more */ - break; - } - - if (code) { + if (GetInput(chanPtr)) { /* Read error */ UpdateInterest(chanPtr); TclChannelRelease((Tcl_Channel)chanPtr); return -1; } - - assert (IsBufferFull(bufPtr)); + bufPtr = statePtr->inQueueHead; } - assert (bufPtr != NULL); - bytesRead = BytesLeft(bufPtr); bytesWritten = bytesToRead; |