Improved network error handling. (Greg A. Woods)
authorMartin Pool <mbp@samba.org>
Wed, 27 Mar 2002 01:03:13 +0000 (01:03 +0000)
committerMartin Pool <mbp@samba.org>
Wed, 27 Mar 2002 01:03:13 +0000 (01:03 +0000)
NEWS
cleanup.c
clientserver.c
main.c

diff --git a/NEWS b/NEWS
index 6166bf7..6f746e3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -28,3 +28,5 @@ rsync changes since last release
       trailing slashes.
       <http://www.opensource.apple.com/bugs/X/BSD%20Kernel/2734739.html>
       (Martin Pool)
+
+    * Improved network error handling.  (Greg A. Woods)
index 480c200..be2dd7d 100644 (file)
--- 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);
 }
 
index 7e2ec16..40a4376 100644 (file)
@@ -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 168f83e..039b05d 100644 (file)
--- 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 */
 }