PATCH: don't leave core behind on distant machine

Marc Espie espie at nerim.net
Sat Dec 14 18:34:01 EST 2002


I've noticed that
rsync -e ssh network:some
^C

would tend to leave cores behind on the distand machine.

Turns out rsync was trying to log a final error message... which could
not get written to stderr... which got detected by rwrite... which called
exit_cleanup... which in turn tried to write to stderr....... until all
stack got eaten up.

This patch fixes the infinite recursion.

--- cleanup.c.orig	Sat Dec 14 18:55:23 2002
+++ cleanup.c	Sat Dec 14 18:55:55 2002
@@ -43,6 +43,12 @@ void _exit_cleanup(int code, const char 
 	int ocode = code;
 	extern int keep_partial;
 	extern int log_got_error;
+	static int in_cleanup = 0;
+
+	/* forbid recursive calls */
+	if (in_cleanup)
+		return;
+	in_cleanup = 1;
 
 	signal(SIGUSR1, SIG_IGN);
 	signal(SIGUSR2, SIG_IGN);



More information about the rsync mailing list