From: Alan T. DeKok Date: Thu, 13 Jul 2017 19:36:52 +0000 (-0400) Subject: add 'now' parameter X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcb61beb5372f266ceb1d8a2b84a0da0b8aa6903;p=thirdparty%2Ffreeradius-server.git add 'now' parameter functions should avoid calling gettimeofday() --- diff --git a/src/modules/rlm_radius/rlm_radius.c b/src/modules/rlm_radius/rlm_radius.c index a19ed76b5b1..dfd29556192 100644 --- a/src/modules/rlm_radius/rlm_radius.c +++ b/src/modules/rlm_radius/rlm_radius.c @@ -232,7 +232,7 @@ static int transport_parse(TALLOC_CTX *ctx, void *out, CONF_ITEM *ci, UNUSED CON #endif // @todo - pass in REQUEST, or maybe request_io_ctx, so we can store these numbers in the rlm_link_t? -bool rlm_radius_update_delay(struct timeval *start, uint32_t *rt, uint32_t *count, int code, void *client_io_ctx) +bool rlm_radius_update_delay(struct timeval *start, uint32_t *rt, uint32_t *count, int code, void *client_io_ctx, struct timeval *now) { uint32_t delay, frac; rlm_radius_retry_t const *retry; @@ -275,13 +275,13 @@ bool rlm_radius_update_delay(struct timeval *start, uint32_t *rt, uint32_t *coun /* * Cap delay at MRD */ - if (retry->mrd) { - struct timeval now, end; - gettimeofday(&now, NULL); + if (now && retry->mrd) { + struct timeval end; + end = *start; end.tv_sec += retry->mrd; - if (timercmp(&now, &end, >=)) { + if (timercmp(now, &end, >=)) { return false; } } diff --git a/src/modules/rlm_radius/rlm_radius.h b/src/modules/rlm_radius/rlm_radius.h index bc2bd4824b4..c32526dff2c 100644 --- a/src/modules/rlm_radius/rlm_radius.h +++ b/src/modules/rlm_radius/rlm_radius.h @@ -87,6 +87,6 @@ typedef struct fr_radius_client_io_t { /* * So transports can calculate retransmission timers. */ -bool rlm_radius_update_delay(struct timeval *start, uint32_t *rt, uint32_t *count, int code, void *client_io_ctx); +bool rlm_radius_update_delay(struct timeval *start, uint32_t *rt, uint32_t *count, int code, void *client_io_ctx, struct timeval *now); #endif /* _RLM_RADIUS_H */