Tcl Source Code

Artifact [4fa0950818]
Login

Artifact 4fa0950818f5b52b124b32145a18bb0b1fc3f512:

Attachment "tcl.427196.2.diff.txt" to ticket [427196ffff] added by andreas_kupries 2001-07-18 04:11:23.
? tools/man2tcl
? unix/LOG
? unix/LOG.2
? unix/linux-static
? unix/linux-static2
? unix/linux-debug
? unix/linux-ix86
? unix/buffer.tcl
Index: generic/tclIO.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclIO.c,v
retrieving revision 1.31
diff -u -r1.31 tclIO.c
--- generic/tclIO.c	2001/07/17 17:53:43	1.31
+++ generic/tclIO.c	2001/07/17 21:08:10
@@ -1701,6 +1701,17 @@
     }
 
     /*
+     * Only save buffers which are at least as big as the requested
+     * buffersize for the channel. This is to honor dynamic changes
+     * of the buffersize made by the user.
+     */
+
+    if ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize) {
+        ckfree((char *) bufPtr);
+        return;
+    }
+
+    /*
      * Only save buffers for the input queue if the channel is readable.
      */
     
@@ -4994,6 +5005,19 @@
     } else {
 	bufPtr = statePtr->saveInBufPtr;
 	statePtr->saveInBufPtr = NULL;
+
+	/*
+	 * Check the actual buffersize against the requested
+	 * buffersize. Buffers which are smaller than requested aare
+	 * squashed. This is done to honor dynamic changes of the
+	 * buffersize made by the user.
+	 */
+
+	if ((bufPtr != NULL) && ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize)) {
+	  ckfree((char *) bufPtr);
+	  bufPtr = NULL;
+	}
+
 	if (bufPtr == NULL) {
 	    bufPtr = AllocChannelBuffer(statePtr->bufSize);
 	}