Minor refactor for scheduling an async timer. (#854)

Small change to the logic introduced in #839
This commit is contained in:
Michael Grunder 2020-07-26 13:03:42 -07:00 committed by GitHub
parent 38b5ae543f
commit be32bcdc8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 9 deletions

View File

@ -54,14 +54,18 @@
} while(0); } while(0);
static inline void refreshTimeout(redisAsyncContext *ctx) { static inline void refreshTimeout(redisAsyncContext *ctx) {
if (!(ctx->c.flags & REDIS_CONNECTED)) { #define REDIS_TIMER_ISSET(tvp) \
if (ctx->c.connect_timeout && ctx->ev.scheduleTimer && (tvp && ((tvp)->tv_sec || (tvp)->tv_usec))
(ctx->c.connect_timeout->tv_sec || ctx->c.connect_timeout->tv_usec)) {
ctx->ev.scheduleTimer(ctx->ev.data, *ctx->c.connect_timeout); #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)) { if (ctx->c.flags & REDIS_CONNECTED) {
ctx->ev.scheduleTimer(ctx->ev.data, *ctx->c.command_timeout); REDIS_EL_TIMER(ctx, ctx->c.command_timeout);
} else {
REDIS_EL_TIMER(ctx, ctx->c.connect_timeout);
} }
} }

View File

@ -176,9 +176,10 @@ typedef struct {
int type; int type;
/* bit field of REDIS_OPT_xxx */ /* bit field of REDIS_OPT_xxx */
int options; 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; 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; const struct timeval *command_timeout;
union { union {
/** use this field for tcp/ip connections */ /** use this field for tcp/ip connections */