Commit a57873b7 authored by Andrew Tridgell's avatar Andrew Tridgell

fixed check for timeout in generator

the generator can easily make no progress for a long time, so don't do
timeout processing checks
parent 30ce7e8a
......@@ -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 */
......
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment