On Wed, Dec 16, 2009 at 06:24:04AM +0000, David Holland wrote: > On Tue, Dec 15, 2009 at 06:35:18PM +0000, David Laight wrote: > > Modified Files: > > src/sys/kern: sys_pipe.c > > > > Log Message: > > Don't ERESTART write() calls for now. > > I suspect some programs don't allow for the partial transfer. > > More likely, the pipe is stuttering and repeating itself. Once data's > been transferred, you *have* to succeed and return the amount > transferred; otherwise anything that tries again (whether the > application or transparently by syscall restart) is going to send the > same data over again.
The code to handle that is in the sys_read()/sys_write() path. In the same place that EINTR gets converted to 'success' if any bytes have been transferred. David -- David Laight: da...@l8s.co.uk