Blame SOURCES/patch-2.7.6-abort_when_cleaning_up_fails.patch

0a6a4f
commit b7b028a77bd855f6f56b17c8837fc1cca77b469d
0a6a4f
Author: Andreas Gruenbacher <agruen@gnu.org>
0a6a4f
Date:   Fri Jun 28 00:30:25 2019 +0200
0a6a4f
0a6a4f
    Abort when cleaning up fails
0a6a4f
    
0a6a4f
    When a fatal error triggers during cleanup, another attempt will be made to
0a6a4f
    clean up, which will likely lead to the same fatal error.  So instead, bail out
0a6a4f
    when that happens.
0a6a4f
    src/patch.c (cleanup): Bail out when called recursively.
0a6a4f
    (main): There is no need to call output_files() before cleanup() as cleanup()
0a6a4f
    already does that.
0a6a4f
0a6a4f
diff --git a/src/patch.c b/src/patch.c
0a6a4f
index 4616a48..02fd982 100644
0a6a4f
--- a/src/patch.c
0a6a4f
+++ b/src/patch.c
0a6a4f
@@ -685,7 +685,6 @@ main (int argc, char **argv)
0a6a4f
     }
0a6a4f
     if (outstate.ofp && (ferror (outstate.ofp) || fclose (outstate.ofp) != 0))
0a6a4f
       write_fatal ();
0a6a4f
-    output_files (NULL);
0a6a4f
     cleanup ();
0a6a4f
     delete_files ();
0a6a4f
     if (somefailed)
0a6a4f
@@ -1991,7 +1990,6 @@ void
0a6a4f
 fatal_exit (int sig)
0a6a4f
 {
0a6a4f
   cleanup ();
0a6a4f
-
0a6a4f
   if (sig)
0a6a4f
     exit_with_signal (sig);
0a6a4f
 
0a6a4f
@@ -2011,6 +2009,12 @@ remove_if_needed (char const *name, bool *needs_removal)
0a6a4f
 static void
0a6a4f
 cleanup (void)
0a6a4f
 {
0a6a4f
+  static bool already_cleaning_up;
0a6a4f
+
0a6a4f
+  if (already_cleaning_up)
0a6a4f
+    return;
0a6a4f
+  already_cleaning_up = true;
0a6a4f
+
0a6a4f
   remove_if_needed (TMPINNAME, &TMPINNAME_needs_removal);
0a6a4f
   remove_if_needed (TMPOUTNAME, &TMPOUTNAME_needs_removal);
0a6a4f
   remove_if_needed (TMPPATNAME, &TMPPATNAME_needs_removal);