From be32bcdc8e84ae7dc091ceeffca2c5d4126f415c Mon Sep 17 00:00:00 2001 From: Michael Grunder Date: Sun, 26 Jul 2020 13:03:42 -0700 Subject: [PATCH] Minor refactor for scheduling an async timer. (#854) Small change to the logic introduced in #839 --- async_private.h | 18 +++++++++++------- hiredis.h | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/async_private.h b/async_private.h index e4a22ab..b9d23ff 100644 --- a/async_private.h +++ b/async_private.h @@ -54,14 +54,18 @@ } while(0); static inline void refreshTimeout(redisAsyncContext *ctx) { - if (!(ctx->c.flags & REDIS_CONNECTED)) { - if (ctx->c.connect_timeout && ctx->ev.scheduleTimer && - (ctx->c.connect_timeout->tv_sec || ctx->c.connect_timeout->tv_usec)) { - ctx->ev.scheduleTimer(ctx->ev.data, *ctx->c.connect_timeout); + #define REDIS_TIMER_ISSET(tvp) \ + (tvp && ((tvp)->tv_sec || (tvp)->tv_usec)) + + #define REDIS_EL_TIMER(ac, tvp) \ + if ((ac)->ev.scheduleTimer && REDIS_TIMER_ISSET(tvp)) { \ + (ac)->ev.scheduleTimer((ac)->ev.data, *(tvp)); \ } - } else if (ctx->c.command_timeout && ctx->ev.scheduleTimer && - (ctx->c.command_timeout->tv_sec || ctx->c.command_timeout->tv_usec)) { - ctx->ev.scheduleTimer(ctx->ev.data, *ctx->c.command_timeout); + + if (ctx->c.flags & REDIS_CONNECTED) { + REDIS_EL_TIMER(ctx, ctx->c.command_timeout); + } else { + REDIS_EL_TIMER(ctx, ctx->c.connect_timeout); } } diff --git a/hiredis.h b/hiredis.h index fe2dae4..1a6bf0b 100644 --- a/hiredis.h +++ b/hiredis.h @@ -176,9 +176,10 @@ typedef struct { int type; /* bit field of REDIS_OPT_xxx */ int options; - /* timeout value for connect operation. if NULL, no timeout is used */ + /* timeout value for connect operation. If NULL, no timeout is used */ const struct timeval *connect_timeout; - /* timeout value for commands. if NULL, no timeout is used. (can be set later on with redisSetTimeout/redisAsyncSetTimeout) */ + /* timeout value for commands. If NULL, no timeout is used. This can be + * updated at runtime with redisSetTimeout/redisAsyncSetTimeout. */ const struct timeval *command_timeout; union { /** use this field for tcp/ip connections */