summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--async_private.h18
-rw-r--r--hiredis.h5
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 */