From: Rodrigo Osorio Date: Sun, 2 Jan 2022 22:37:27 +0000 (+0100) Subject: Time-limit options are not being checked enough (#179) X-Git-Tag: v3.2.4pre1~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ffbca80ca2347beaa1004db56db439cdfa59f59e;p=thirdparty%2Frsync.git Time-limit options are not being checked enough (#179) The `--stop-at`, `--stop-after`, and `--time-limit`` options should have their limit checked when receiving and sending data, not just when receiving. Fixes #177. --- diff --git a/io.c b/io.c index abb0f7ab..8b5c690f 100644 --- a/io.c +++ b/io.c @@ -801,12 +801,8 @@ static char *perform_io(size_t needed, int flags) who_am_i(), (SIZE_T_FMT_CAST)n); } - if (io_timeout || stop_at_utime) { + if (io_timeout) { last_io_in = time(NULL); - if (stop_at_utime && last_io_in >= stop_at_utime) { - rprintf(FERROR, "stopping at requested limit\n"); - exit_cleanup(RERR_TIMEOUT); - } if (io_timeout && flags & PIO_NEED_INPUT) maybe_send_keepalive(last_io_in, 0); } @@ -815,6 +811,11 @@ static char *perform_io(size_t needed, int flags) iobuf.in.len += n; } + if (stop_at_utime && time(NULL) >= stop_at_utime) { + rprintf(FERROR, "stopping at requested limit\n"); + exit_cleanup(RERR_TIMEOUT); + } + if (out && FD_ISSET(iobuf.out_fd, &w_fds)) { size_t len = iobuf.raw_flushing_ends_before ? iobuf.raw_flushing_ends_before - out->pos : out->len; ssize_t n;