This is the mail archive of the
cygwin
mailing list for the Cygwin project.
expect - broken pipe
- From: "Jon Beniston" <jon at beniston dot com>
- To: <cygwin at cygwin dot com>
- Date: Wed, 20 Jan 2016 11:47:20 -0000
- Subject: expect - broken pipe
- Authentication-results: sourceware.org; auth=none
Hi,
I'm trying to run the GCC DejaGNU testsuite on 32-bit Cygwin. It randomly
fails with the message:
"parent: sync byte write: broken pipe"
This occurs frequently if the testsuite is run in parallel (i.e. make -j4),
but occasionally when not in parallel too.
It seems this error message is generated by the 'expect' program,
specifically from exp_command.c. This does roughly the following:
pipe(sync_fds);
pipe(sync2_fds);
.
pid = fork();
if (pid) { /* parent */
close(sync_fds[1]);
close(sync2_fds[0]);
/* wait for slave to initialize */
while (((rc = read(sync_fds[0],&sync_byte,1)) < 0) && (errno == EINTR))
{
/* empty */;
}
...
/* tell slave to go on */
wc = write(sync2_fds[1]," ",1);
if (wc == -1) {
expErrorLog("parent: sync byte write: %s\r\n",Tcl_ErrnoMsg(errno));
}
So, the write to the pipe is failing randomly with errno==EPIPE. Any idea
why this might be?
What is strange, is if I remove the call to close(sync2_fds[0]), then the
write never fails. Closing the unused end of the pipe seems fairly standard
behaviour as that is what is given as an example in the pipe() man page.
Cheers,
Jon
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple