summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-05-12 17:43:36 +0200
committerantirez <antirez@gmail.com>2014-05-20 17:45:49 +0200
commite10ee0728a79e674ecc6b28f0e609c5f5064ff86 (patch)
tree44383b3f65701dbc45c0731993b88697509278c9
parente84dcabf8368875e6ff89b59ff69e95ad2766059 (diff)
downloadredis-e10ee0728a79e674ecc6b28f0e609c5f5064ff86.tar.gz
Cluster: fixed data_age computation / check integer overflow.
-rw-r--r--src/cluster.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/cluster.c b/src/cluster.c
index 6ce6a3d14..81eff9442 100644
--- a/src/cluster.c
+++ b/src/cluster.c
@@ -2318,9 +2318,10 @@ void clusterHandleSlaveFailover(void) {
/* Set data_age to the number of seconds we are disconnected from
* the master. */
if (server.repl_state == REDIS_REPL_CONNECTED) {
- data_age = (server.unixtime - server.master->lastinteraction) * 1000;
+ data_age = (mstime_t)(server.unixtime - server.master->lastinteraction)
+ * 1000;
} else {
- data_age = (server.unixtime - server.repl_down_since) * 1000;
+ data_age = (mstime_t)(server.unixtime - server.repl_down_since) * 1000;
}
/* Remove the node timeout from the data age as it is fine that we are
@@ -2335,7 +2336,7 @@ void clusterHandleSlaveFailover(void) {
*
* Check bypassed for manual failovers. */
if (data_age >
- (server.repl_ping_slave_period * 1000) +
+ ((mstime_t)server.repl_ping_slave_period * 1000) +
(server.cluster_node_timeout * REDIS_CLUSTER_SLAVE_VALIDITY_MULT))
{
if (!manual_failover) return;