Attachment "fcopy-async-tcl8.4.patch" to
ticket [1932639fff]
added by
andreas_kupries
2008-04-03 05:45:27.
--- tcl84.orig/generic/tclIO.c 2008-04-02 14:18:30.000000000 -0800
+++ tcl84/generic/tclIO.c 2008-04-02 14:26:58.000000000 -0800
@@ -7835,22 +7835,32 @@
goto writeError;
}
- /*
- * Read up to bufSize bytes.
- */
+ if (cmdPtr && (mask == 0)) {
+ /*
+ * In async mode, we skip reading synchronously and fake an
+ * underflow instead to prime the readable fileevent.
+ */
- if ((csPtr->toRead == -1) || (csPtr->toRead > csPtr->bufSize)) {
- sizeb = csPtr->bufSize;
+ size = 0;
+ underflow = 1;
} else {
- sizeb = csPtr->toRead;
- }
+ /*
+ * Read up to bufSize bytes.
+ */
- if (inBinary || sameEncoding) {
- size = DoRead(inStatePtr->topChanPtr, csPtr->buffer, sizeb);
- } else {
- size = DoReadChars(inStatePtr->topChanPtr, bufObj, sizeb, 0 /* No append */);
+ if ((csPtr->toRead == -1) || (csPtr->toRead > csPtr->bufSize)) {
+ sizeb = csPtr->bufSize;
+ } else {
+ sizeb = csPtr->toRead;
+ }
+
+ if (inBinary || sameEncoding) {
+ size = DoRead(inStatePtr->topChanPtr, csPtr->buffer, sizeb);
+ } else {
+ size = DoReadChars(inStatePtr->topChanPtr, bufObj, sizeb, 0 /* No append */);
+ }
+ underflow = (size >= 0) && (size < sizeb); /* input underflow */
}
- underflow = (size >= 0) && (size < sizeb); /* input underflow */
if (size < 0) {
readError: