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.
This commit is contained in:
Rodrigo Osorio
2022-01-02 23:37:27 +01:00
committed by GitHub
parent c11467af36
commit ffbca80ca2

11
io.c
View File

@@ -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;