Hi there,

        I'd like to get this into libreoffice-3-4 - I hope it is self
explanatory ;-) amused to catch this in the debugger on Linux, and see
the 100% CPU spin that injecting a bogus EPIPE causes to 'Quit'.

        ATB,

                Michael.

>From 7f823d91d55900ee7d5bedbc145b280942fe0b69 Mon Sep 17 00:00:00 2001
From: Michael Meeks <[email protected]>
Date: Fri, 22 Jul 2011 10:58:00 +0100
Subject: [PATCH] don't let our fprintf on a broken pipe pollute errno's ECHILD 
with EPIPE

---
 dmake/unix/runargv.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dmake/unix/runargv.c b/dmake/unix/runargv.c
index 4d18eff..8135e67 100644
--- a/dmake/unix/runargv.c
+++ b/dmake/unix/runargv.c
@@ -269,9 +269,10 @@ dmwaitnext( wid, status )
 
    /* If ECHILD is set from waitpid/wait then no child was left. */
    if( *wid  == -1 ) {
-      fprintf(stderr, "%s:  Internal Error: wait() failed: %d -  %s\n",
-          Pname, errno, strerror(errno) );
-      if(errno != ECHILD) {
+        int realErr = errno; // fprintf can pollute errno
+        fprintf(stderr, "%s:  Internal Error: wait() failed: %d -  %s\n",
+                        Pname, errno, strerror(errno) );
+      if( realErr != ECHILD ) {
      /* Wait was interrupted or a child was terminated (SIGCHLD) */
      return -2;
       } else {
@@ -369,9 +370,10 @@ dmwaitpid( pqid, wid, status )
    }
    /* If ECHILD is set from waitpid/wait then no child was left. */
    if( *wid  == -1 ) {
+        int realErr = errno; // fprintf can pollute errno
       fprintf(stderr, "%s:  Internal Error: waitpid() failed: %d -  %s\n",
           Pname, errno, strerror(errno) );
-      if(errno != ECHILD) {
+      if(realErr != ECHILD) {
      /* Wait was interrupted or a child was terminated (SIGCHLD) */
      return -2;
       } else {
-- 
1.7.3.4


-- 
 [email protected]  <><, Pseudo Engineer, itinerant idiot


_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to