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 +#include #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; } }