Don't complain about a socket EOF unless it affects a read.
[rsync/rsync.git] / cleanup.c
index 2b1d697..ae185d4 100644 (file)
--- a/cleanup.c
+++ b/cleanup.c
@@ -136,17 +136,6 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
                                code, file, line);
                }
 
-               /* FALLTHROUGH */
-#include "case_N.h"
-
-               if (exit_code && exit_code != RERR_RCVR_ERROR
-                && exit_code != RERR_STREAMIO && exit_code != RERR_SIGNAL1
-                && (protocol_version >= 31 || (!am_sender && !am_generator))) {
-                       send_msg_int(MSG_ERROR_EXIT, exit_code);
-                       if (am_server && !am_sender && !am_generator)
-                               noop_io_until_death();
-               }
-
                /* FALLTHROUGH */
 #include "case_N.h"
 
@@ -205,7 +194,9 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
                                code = exit_code = RERR_PARTIAL;
                }
 
-               if ((code && code != RERR_RCVR_ERROR)
+               /* If line < 0, this exit is after a MSG_ERROR_EXIT event, so
+                * we don't want to output a duplicate error. */
+               if ((code && line > 0)
                 || am_daemon || (logfile_name && (am_server || !INFO_GTE(STATS, 1))))
                        log_exit(code, file, line);
 
@@ -219,6 +210,16 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
                                unmodified_code, file, line, code);
                }
 
+               /* FALLTHROUGH */
+#include "case_N.h"
+
+               if (exit_code && exit_code != RERR_STREAMIO && exit_code != RERR_SIGNAL1
+                && (protocol_version >= 31 || (!am_sender && !am_generator))) {
+                       if (line > 0)
+                               send_msg_int(MSG_ERROR_EXIT, exit_code);
+                       noop_io_until_death();
+               }
+
                /* FALLTHROUGH */
 #include "case_N.h"