--- /dev/null
+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;
+ }
+ }