Please test rsync-2.5.6pre1
Sviatoslav Sviridov
svd at lintec.minsk.by
Wed Jan 15 16:43:00 EST 2003
Hello,
It seems that bug with recursive calling of _exit_cleanup() is not fixed
in this version.
In log.c EPIPE is not hanled and this leads to recursive
_exit_cleanup(). First patch I've made for this looks like:
============== cut ==================
--- rsync-2.5.5/log.c 2002-02-18 20:51:12 +0100
+++ rsync-2.5.5.patch/log.c 2002-07-09 12:09:56 +0200
@@ -276,9 +276,11 @@
if (!f) exit_cleanup(RERR_MESSAGEIO);
- if (fwrite(buf, len, 1, f) != 1) exit_cleanup(RERR_MESSAGEIO);
-
- if (buf[len-1] == '\r' || buf[len-1] == '\n') fflush(f);
+ if (fwrite(buf, len, 1, f) == 1) {
+ if (buf[len-1] == '\r' || buf[len-1] == '\n') fflush(f);
+ } else
+ if (errno!=EPIPE)
+ exit_cleanup(RERR_MESSAGEIO);
}
============== cut ==================
Later I've created other instead of first one. It handles all possible
cases of recursive calling of _exit_cleanup():
============== cut ==================
--- rsync-2.5.5/cleanup.c 2002-03-27 02:03:13 +0100
+++ rsync-2.5.5.cleanup/cleanup.c 2002-07-11 12:53:52 +0200
@@ -43,6 +43,11 @@
int ocode = code;
extern int keep_partial;
extern int log_got_error;
+ static int inside_cleanup = 0;
+
+ if (inside_cleanup != 0)
+ return;
+ inside_cleanup = 1;
signal(SIGUSR1, SIG_IGN);
signal(SIGUSR2, SIG_IGN);
============== cut ==================
--
Sviatoslav Sviridoff
// Lintec Project/Minsk // PIN AG/Berlin //
--
He is a man capable of turning any colour into grey.
-- John LeCarre
More information about the rsync
mailing list