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);
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);
}
}

View File

@ -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 */