This is seen in bison and possibly other programs. Bison will
incorrectly receive SIGPIPE and terminate because close_stream() is
picking up a rogue EPIPE in errno. Before fclose(), clearerr(stdout)
needs to be called so that the errors it will check for are for the
immediate call of close_stream().
---
lib/closeout.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/closeout.c b/lib/closeout.c
index 311faf4..36895a2 100644
--- a/lib/closeout.c
+++ b/lib/closeout.c
@@ -106,6 +106,8 @@ close_stdout_set_ignore_EPIPE (bool ignore)
void
close_stdout (void)
{
+ clearerr (stdout);
+
if (close_stream (stdout) != 0
&& !(ignore_EPIPE && errno == EPIPE))
{
--
1.9.0