[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pipe-filter-ii: fix test failure
From: |
Bruno Haible |
Subject: |
pipe-filter-ii: fix test failure |
Date: |
Sun, 5 Jun 2011 19:15:51 +0200 |
User-agent: |
KMail/1.9.9 |
On AIX 5.1, 7.1 and IRIX 6.5, the pipe-filter-ii test fails like this:
./test-pipe-filter-ii1: write to tr subprocess failed: Resource temporarily
unavailable
FAIL: test-pipe-filter-ii1.sh
This fixes it.
2011-06-05 Bruno Haible <address@hidden>
pipe-filter-ii: Fix test failure on AIX and IRIX.
* lib/pipe-filter-ii.c (pipe_filter_ii_execute): When write() fails
with EAGAIN, retry with a smaller buffer size.
*** lib/pipe-filter-ii.c.orig Sun Jun 5 19:12:12 2011
--- lib/pipe-filter-ii.c Sun Jun 5 18:57:39 2011
***************
*** 347,367 ****
const void *buf = prepare_write (&bufsize, private_data);
if (buf != NULL)
{
! ssize_t nwritten =
! write (fd[1], buf,
! bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize);
! if (nwritten < 0)
{
! if (!IS_EAGAIN (errno))
{
! if (exit_on_error)
! error (EXIT_FAILURE, errno,
! _("write to %s subprocess failed"),
progname);
! goto fail;
}
}
- else if (nwritten > 0)
- done_write ((void *) buf, nwritten, private_data);
}
else
{
--- 347,388 ----
const void *buf = prepare_write (&bufsize, private_data);
if (buf != NULL)
{
! /* Writing to a pipe in non-blocking mode is tricky: The
! write() call may fail with EAGAIN, simply because suffcient
! space is not available in the pipe. See POSIX:2008
!
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>.
! This happens actually on AIX and IRIX, when bufsize >= 8192
! (even though PIPE_BUF and pathconf ("/", _PC_PIPE_BUF) are
! both 32768). */
! size_t attempt_to_write =
! (bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize);
! for (;;)
{
! ssize_t nwritten = write (fd[1], buf, attempt_to_write);
! if (nwritten < 0)
{
! if (errno == EAGAIN)
! {
! attempt_to_write = attempt_to_write / 2;
! if (attempt_to_write == 0)
! break;
! }
! else if (!IS_EAGAIN (errno))
! {
! if (exit_on_error)
! error (EXIT_FAILURE, errno,
! _("write to %s subprocess failed"),
! progname);
! goto fail;
! }
! }
! else
! {
! if (nwritten > 0)
! done_write ((void *) buf, nwritten, private_data);
! break;
}
}
}
else
{
--
In memoriam Eduard Lederer <http://de.wikipedia.org/wiki/Eduard_Lederer>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- pipe-filter-ii: fix test failure,
Bruno Haible <=