[Based on a look at the code, would appear to be a real problem. Fixes: (1) child reads from the pipe before exiting. But this is a race, presumably can't work; (2) child tells the parent "I'd like to exit" and then parent tells child "OK, I've turned it off". Might work, haven't thought too hard; (3) Just catch the SIGPIPE in the parent. This seems simple but I don't really like it. I guess maybe because it wouldn't distinguish between SIGPIPE for this reason and SIGPIPE for other reasons? Or general gut feelings? -kingdon] Date: Fri, 18 Sep 1998 18:32:38 -0700 From: Xeno To: bug-cvs@gnu.org Subject: cvs server flow-control bug There's a problem with the flow-control done by the cvs server process I thought people might be interested to know about. Workaround is easy, just comment out the #define SERVER_FLOWCONTROL in src/options.h and put a rebuilt executable on the server side. The problem is that when the parent process tries to write a flow-control signal to the child process, there's no guarantee that the child process will run long enough to read it. When updating a particularly large file (29M) with cvs 1.9 on irix 6.2 server-side, it looks like the parent process blocks on a flow-control write() and the child process doesn't read() it before exiting. So the parent process gets a SIGPIPE from that write() and freaks, reporting an error back to the cvs client. Hope this helps somebody somewhere, thanks for creating such a cool tool. Xeno