diff -ur cvs-1.11.1p1.orig/src/buffer.c cvs-1.11.1p1/src/buffer.c
--- cvs-1.11.1p1.orig/src/buffer.c	Thu Apr 19 21:29:05 2001
+++ cvs-1.11.1p1/src/buffer.c	Thu Feb 14 13:22:23 2002
@@ -1,6 +1,7 @@
 /* Code for the buffer data structure.  */
 
 #include <assert.h>
+#include <unistd.h>
 #include "cvs.h"
 #include "buffer.h"
 
@@ -292,15 +293,28 @@
 
 	    if (nbytes != data->size)
 	    {
+	    	struct buffer_data *p;
+		int cnt;
+		
 		/* Not all the data was written out.  This is only
                    permitted in nonblocking mode.  Adjust the buffer,
                    and return.  */
 
 		assert (buf->nonblocking);
 
+		cnt = 0;
+		for (p = data; p->next; p = p->next)
+			cnt++;
+
 		data->size -= nbytes;
 		data->bufp += nbytes;
 
+		/* Don't allow buffers to grow over 100 pages. */
+		if (cnt > 100) {
+			usleep(100000);
+			continue;
+		}
+			
 		return 0;
 	    }
 	}