From ffbca80ca2347beaa1004db56db439cdfa59f59e Mon Sep 17 00:00:00 2001 From: Rodrigo Osorio Date: Sun, 2 Jan 2022 23:37:27 +0100 Subject: [PATCH] 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. --- io.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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; -- 2.47.2