rsync-2.5.5 memory eater problem
Sviatoslav Sviridov
svd at lintec.minsk.by
Wed Oct 9 09:53:00 EST 2002
On Wed, 9 Oct 2002 10:03:33 +0200 (CEST)
Ruediger Oertel <ro at suse.de> wrote:
> Hi,
>
> we ran into a little problem with rsync-2.5.5.
>
> Setup: you run rsync-2.5.5 as normal rsync over ssh
> (ie. not connecting to a rsync server). If you start
> such a rsync but interrupt the pulling process with Ctrl-C,
> the process on the other side may start to allocate all
> memory on the remote machine.
>
> As fa as we have analyzed the problem, the remote rsync
> process wants to issue a error message that it could not
> write 4096 bytes, receives a SIGPIPE and errno is set to EPIPE
> in the fwrite call (line 279 in log.c). Then exit_cleanup is called
> which in turn will call the same routine again and will of course
> get EPIPE again and the loop continues (as long as we have memory
> to recursivly call the same functions again and again).
>
> As a quick workaround we have the following patch, since there is
> no real point in trying to issue an error message if you have
> already received EPIPE on write.
>
> --- log.c
> +++ log.c 2002/10/08 11:55:52
> @@ -276,7 +276,7 @@
>
> if (!f) exit_cleanup(RERR_MESSAGEIO);
>
> - if (fwrite(buf, len, 1, f) != 1) exit_cleanup(RERR_MESSAGEIO);
> + if (fwrite(buf, len, 1, f) != 1 && errno != EPIPE)
> exit_cleanup(RERR_MESSAGEIO);
>
> if (buf[len-1] == '\r' || buf[len-1] == '\n') fflush(f);
> }
>
I've had the same problem, but in different situation: when rsync was started
as piped child (I did it in "rsync" method for apt). My fist path was above
one, but later I've found that problem is in exit_cleanup(). I use this patch:
--- 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);
--
Sviatoslav Sviridov
[mailto:svd at lintec.minsk.by] [ICQ#10845380] [Lintec Project] [MLUG]
--
Everyone who comes in here wants three things:
(1) They want it quick.
(2) They want it good.
(3) They want it cheap.
I tell 'em to pick two and call me back.
-- sign on the back wall of a small printing company
More information about the rsync
mailing list