The last MSG_DONE from the receiver to the generator is now followed
authorWayne Davison <wayned@samba.org>
Sat, 27 Jan 2007 14:34:15 +0000 (14:34 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 27 Jan 2007 14:34:15 +0000 (14:34 +0000)
by the stats.total_read value so that the generator can set its value
to that of the receiver.  This makes log_exit() log the right value
when we're on the server side.

io.c
main.c

diff --git a/io.c b/io.c
index 7bf0afc..0968b01 100644 (file)
--- a/io.c
+++ b/io.c
@@ -288,13 +288,17 @@ static void read_msg_fd(void)
 
        switch (tag) {
        case MSG_DONE:
 
        switch (tag) {
        case MSG_DONE:
-               if (len != 0 || !am_generator) {
+               if (len < 0 || len > 1 || !am_generator) {
                  invalid_msg:
                        rprintf(FERROR, "invalid message %d:%d [%s%s]\n",
                                tag, len, who_am_i(),
                                incremental ? "/incremental" : "");
                        exit_cleanup(RERR_STREAMIO);
                }
                  invalid_msg:
                        rprintf(FERROR, "invalid message %d:%d [%s%s]\n",
                                tag, len, who_am_i(),
                                incremental ? "/incremental" : "");
                        exit_cleanup(RERR_STREAMIO);
                }
+               if (len) {
+                       readfd(fd, buf, len);
+                       stats.total_read = read_longint(fd);
+               }
                done_cnt++;
                break;
        case MSG_REDO:
                done_cnt++;
                break;
        case MSG_REDO:
diff --git a/main.c b/main.c
index 273513f..5371b14 100644 (file)
--- a/main.c
+++ b/main.c
@@ -727,7 +727,8 @@ static int do_recv(int f_in, int f_out, char *local_name)
                io_flush(FULL_FLUSH);
                handle_stats(f_in);
 
                io_flush(FULL_FLUSH);
                handle_stats(f_in);
 
-               send_msg(MSG_DONE, "", 0);
+               send_msg(MSG_DONE, "", 1);
+               write_longint(error_pipe[1], stats.total_read);
                io_flush(FULL_FLUSH);
 
                /* Handle any keep-alive packets from the post-processing work
                io_flush(FULL_FLUSH);
 
                /* Handle any keep-alive packets from the post-processing work