Better fix for infinite recursion; don't return from exit_cleanup
authorDavid Dykstra <dwd@samba.org>
Sun, 26 Jan 2003 03:53:34 +0000 (03:53 +0000)
committerDavid Dykstra <dwd@samba.org>
Sun, 26 Jan 2003 03:53:34 +0000 (03:53 +0000)
unless the nesting is already pretty deep, because there are normal
cases where exit_cleanup is nested shallowly.  Patch from Marc Espie,
posted by Brian Poole.

NEWS
cleanup.c

diff --git a/NEWS b/NEWS
index 2e6404d..5149b77 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -69,7 +69,7 @@ rsync changes since last release
       broken.  (Dave Dykstra)
 
     * Prevent infinite recursion in cleanup code under certain circumstances.
-      (Sviatoslav Sviridov)
+      (Sviatoslav Sviridov and Marc Espie)
 
     * Fixed a bug that prevented rsync from creating intervening directories
       when --relative-paths/-R is set.  (Craig Barratt)
index b9e9dab..8543217 100644 (file)
--- a/cleanup.c
+++ b/cleanup.c
@@ -63,11 +63,11 @@ void _exit_cleanup(int code, const char *file, int line)
        extern int log_got_error;
        static int inside_cleanup = 0;
 
-       if (inside_cleanup != 0) {
+       if (inside_cleanup > 10) {
                /* prevent the occasional infinite recursion */
                return;
        }
-       inside_cleanup = 1;
+       inside_cleanup++;
 
        signal(SIGUSR1, SIG_IGN);
        signal(SIGUSR2, SIG_IGN);