fixed check for timeout in generator
authorAndrew Tridgell <tridge@samba.org>
Sun, 9 Sep 2001 04:42:09 +0000 (04:42 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 9 Sep 2001 04:42:09 +0000 (04:42 +0000)
the generator can easily make no progress for a long time, so don't do
timeout processing checks

generator.c
io.c

index 767e86c7fe78cbc19ca36c0a74387a8c2bcc493c..6b242683beaf408e32b7f82261cae3b689ac5dda 100644 (file)
@@ -429,6 +429,11 @@ void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
                rprintf(FINFO,"generator starting pid=%d count=%d\n",
                        (int)getpid(),flist->count);
 
+       /* we expect to just sit around now, so don't exit on a
+          timeout. If we really get a timeout then the other process should
+          exit */
+       io_timeout = 0;
+
        for (i = 0; i < flist->count; i++) {
                struct file_struct *file = flist->files[i];
                mode_t saved_mode = file->mode;
@@ -458,11 +463,6 @@ void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
 
        write_int(f,-1);
 
-       /* we expect to just sit around now, so don't exit on a
-          timeout. If we really get a timeout then the other process should
-          exit */
-       io_timeout = 0;
-
        if (remote_version >= 13) {
                /* in newer versions of the protocol the files can cycle through
                   the system more than once to catch initial checksum errors */
diff --git a/io.c b/io.c
index a451c1337b75e7c619af3f844e7dda8904af6d69..e57d07088ddd8a2b0cc9f4e3c5ca83e7a0d98fa2 100644 (file)
--- a/io.c
+++ b/io.c
@@ -174,6 +174,7 @@ static int read_timeout (int fd, char *buf, int len)
                fd_set fds;
                struct timeval tv;
                int fd_count = fd+1;
+               int count;
 
                FD_ZERO(&fds);
                FD_SET(fd, &fds);
@@ -187,11 +188,16 @@ static int read_timeout (int fd, char *buf, int len)
 
                errno = 0;
 
-               if (select(fd_count, &fds, NULL, NULL, &tv) < 1) {
+               count = select(fd_count, &fds, NULL, NULL, &tv);
+
+               if (count == 0) {
+                       check_timeout();
+               }
+
+               if (count <= 0) {
                        if (errno == EBADF) {
                                exit_cleanup(RERR_SOCKETIO);
                        }
-                       check_timeout();
                        continue;
                }
 
@@ -402,11 +408,14 @@ static void writefd_unbuffered(int fd,char *buf,int len)
                               &w_fds,NULL,
                               &tv);
 
+               if (count == 0) {
+                       check_timeout();
+               }
+
                if (count <= 0) {
                        if (errno == EBADF) {
                                exit_cleanup(RERR_SOCKETIO);
                        }
-                       check_timeout();
                        continue;
                }