The patches for 3.0.9.
[rsync.git/patches.git] / time-limit.diff
index 20daa74ce1a8abc1d561788573bb236ebfbf8ef2..0ede999cf61b16145c6585623c76023279a67a9f 100644 (file)
@@ -9,10 +9,11 @@ To use this patch, run these commands for a successful build:
     ./configure                              (optional if already run)
     make
 
+based-on: 40afd365cc8ca968fd16e161d24df5b8a8a520cc
 diff --git a/io.c b/io.c
 --- a/io.c
 +++ b/io.c
-@@ -54,6 +54,7 @@ extern int protocol_version;
+@@ -53,6 +53,7 @@ extern int protocol_version;
  extern int remove_source_files;
  extern int preserve_hard_links;
  extern struct stats stats;
@@ -20,38 +21,31 @@ diff --git a/io.c b/io.c
  extern struct file_list *cur_flist;
  #ifdef ICONV_OPTION
  extern int filesfrom_convert;
-@@ -219,16 +220,24 @@ static void check_timeout(void)
+@@ -123,11 +124,19 @@ static void check_timeout(void)
  {
-       time_t t;
+       time_t t, chk;
  
+-      if (!io_timeout || ignore_timeout)
 +      if ((!io_timeout || ignore_timeout) && !stop_at_utime)
-+              return;
-+
-+      t = time(NULL);
-+
+               return;
+       t = time(NULL);
 +      if (stop_at_utime && t >= stop_at_utime) {
 +              rprintf(FERROR, "run-time limit exceeded\n");
 +              exit_cleanup(RERR_TIMEOUT);
 +      }
 +
-       if (!io_timeout || ignore_timeout)
-               return;
-       if (!last_io_in) {
--              last_io_in = time(NULL);
-+              last_io_in = t;
-               return;
-       }
++      if (!io_timeout || ignore_timeout)
++              return;
++
+       if (!last_io_in)
+               last_io_in = t;
  
--      t = time(NULL);
--
-       if (t - last_io_in >= io_timeout) {
-               if (!am_server && !am_daemon) {
-                       rprintf(FERROR, "io timeout after %d seconds -- exiting\n",
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -113,6 +113,7 @@ size_t bwlimit_writemax = 0;
+@@ -111,6 +111,7 @@ size_t bwlimit_writemax = 0;
  int ignore_existing = 0;
  int ignore_non_existing = 0;
  int need_messages_from_generator = 0;
@@ -59,7 +53,7 @@ diff --git a/options.c b/options.c
  int max_delete = INT_MIN;
  OFF_T max_size = 0;
  OFF_T min_size = 0;
-@@ -424,6 +425,8 @@ void usage(enum logcode F)
+@@ -423,6 +424,8 @@ void usage(enum logcode F)
    rprintf(F,"     --password-file=FILE    read daemon-access password from FILE\n");
    rprintf(F,"     --list-only             list the files instead of copying them\n");
    rprintf(F,"     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second\n");
@@ -68,7 +62,7 @@ diff --git a/options.c b/options.c
    rprintf(F,"     --write-batch=FILE      write a batched update to FILE\n");
    rprintf(F,"     --only-write-batch=FILE like --write-batch but w/o updating destination\n");
    rprintf(F,"     --read-batch=FILE       read a batched update from FILE\n");
-@@ -446,7 +449,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -445,7 +448,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
@@ -77,7 +71,7 @@ diff --git a/options.c b/options.c
        OPT_SERVER, OPT_REFUSED_BASE = 9000};
  
  static struct poptOption long_options[] = {
-@@ -626,6 +629,8 @@ static struct poptOption long_options[] = {
+@@ -625,6 +628,8 @@ static struct poptOption long_options[] = {
    {"no-timeout",       0,  POPT_ARG_VAL,    &io_timeout, 0, 0, 0 },
    {"contimeout",       0,  POPT_ARG_INT,    &connect_timeout, 0, 0, 0 },
    {"no-contimeout",    0,  POPT_ARG_VAL,    &connect_timeout, 0, 0, 0 },
@@ -86,7 +80,7 @@ diff --git a/options.c b/options.c
    {"rsh",             'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
    {"rsync-path",       0,  POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
    {"temp-dir",        'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -1260,6 +1265,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1259,6 +1264,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        return 0;
  #endif
  
@@ -123,7 +117,7 @@ diff --git a/options.c b/options.c
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off. */
-@@ -1911,6 +1946,15 @@ void server_options(char **args, int *argc_p)
+@@ -1924,6 +1959,15 @@ void server_options(char **args, int *argc_p)
                args[ac++] = arg;
        }
  
@@ -142,7 +136,7 @@ diff --git a/options.c b/options.c
 diff --git a/rsync.yo b/rsync.yo
 --- a/rsync.yo
 +++ b/rsync.yo
-@@ -418,6 +418,8 @@ to the detailed description below for a complete description.  verb(
+@@ -435,6 +435,8 @@ to the detailed description below for a complete description.  verb(
       --password-file=FILE    read daemon-access password from FILE
       --list-only             list the files instead of copying them
       --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
@@ -151,7 +145,7 @@ diff --git a/rsync.yo b/rsync.yo
       --write-batch=FILE      write a batched update to FILE
       --only-write-batch=FILE like --write-batch but w/o updating dest
       --read-batch=FILE       read a batched update from FILE
-@@ -2025,6 +2027,19 @@ transfer was too fast, it will wait before sending the next data block. The
+@@ -2153,6 +2155,19 @@ transfer was too fast, it will wait before sending the next data block. The
  result is an average transfer rate equaling the specified limit. A value
  of zero specifies no limit.
  
@@ -305,6 +299,6 @@ diff --git a/util.c b/util.c
 +      return val;
 +}
 +
+ /* This returns 0 for success, 1 for a symlink if symlink time-setting
+  * is not possible, or -1 for any other error. */
  int set_modtime(const char *fname, time_t modtime, mode_t mode)
- {
- #if !defined HAVE_LUTIMES || !defined HAVE_UTIMES