From 9098bbf3b37e6e90b3bcbf2531b73ee0fb21b120 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Wed, 27 Mar 2002 01:03:13 +0000 Subject: [PATCH] Improved network error handling. (Greg A. Woods) --- NEWS | 2 ++ cleanup.c | 9 +++++++++ clientserver.c | 3 ++- main.c | 8 +++++--- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 6166bf79..6f746e31 100644 --- a/NEWS +++ b/NEWS @@ -28,3 +28,5 @@ rsync changes since last release trailing slashes. (Martin Pool) + + * Improved network error handling. (Greg A. Woods) diff --git a/cleanup.c b/cleanup.c index 480c2009..be2dd7d8 100644 --- a/cleanup.c +++ b/cleanup.c @@ -40,12 +40,17 @@ pid_t cleanup_child_pid = -1; */ void _exit_cleanup(int code, const char *file, int line) { + int ocode = code; extern int keep_partial; extern int log_got_error; signal(SIGUSR1, SIG_IGN); signal(SIGUSR2, SIG_IGN); + if (verbose > 3) + rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): entered\n", + code, file, line); + if (cleanup_child_pid != -1) { int status; if (waitpid(cleanup_child_pid, &status, WNOHANG) == cleanup_child_pid) { @@ -81,6 +86,10 @@ void _exit_cleanup(int code, const char *file, int line) if (code) log_exit(code, file, line); + if (verbose > 2) + rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): about to call exit(%d)\n", + ocode, file, line, code); + exit(code); } diff --git a/clientserver.c b/clientserver.c index 7e2ec161..40a43768 100644 --- a/clientserver.c +++ b/clientserver.c @@ -47,6 +47,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) extern int remote_version; extern int am_sender; extern char *shell_cmd; + extern int list_only; extern int kludge_around_eof; extern char *bind_address; extern int default_af_hint; @@ -126,7 +127,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[]) /* Old servers may just drop the connection here, rather than sending a proper EXIT command. Yuck. */ - kludge_around_eof = remote_version < 25; + kludge_around_eof = list_only && (remote_version < 25); while (1) { if (!read_line(fd, line, sizeof(line)-1)) { diff --git a/main.c b/main.c index 168f83e1..039b05da 100644 --- a/main.c +++ b/main.c @@ -881,8 +881,10 @@ int main(int argc,char *argv[]) ret = start_client(argc, argv); if (ret == -1) - exit_cleanup(RERR_STARTCLIENT); + exit_cleanup(RERR_STARTCLIENT); else - exit_cleanup(ret); - return ret; + exit_cleanup(ret); + + exit(ret); + /* NOTREACHED */ } -- 2.34.1