summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-04-04 15:29:32 +0200
committerantirez <antirez@gmail.com>2014-04-16 15:09:46 +0200
commitf5bdaf366ef922224c677d8cb97a49bab2013659 (patch)
tree2aef9c1b0d09c90f645455dc6c3b29101358d682
parentae6103ebf606c2c00b6ed3a27cb927b3b0dd7930 (diff)
downloadredis-f5bdaf366ef922224c677d8cb97a49bab2013659.tar.gz
PFCOUNT: always unshare/decode the object.
This will be a non-op most of the times since the object will be unshared / decoded, however it is more technically correct to start this way since the object may be decoded even in the read-only code path.
-rw-r--r--src/hyperloglog.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/hyperloglog.c b/src/hyperloglog.c
index 0ae66a0fc..aba74803a 100644
--- a/src/hyperloglog.c
+++ b/src/hyperloglog.c
@@ -520,6 +520,7 @@ void pfcountCommand(redisClient *c) {
addReply(c,shared.czero);
} else {
if (isHLLObjectOrReply(c,o) != REDIS_OK) return;
+ o = dbUnshareStringValue(c->db,c->argv[1],o);
/* Check if the cached cardinality is valid. */
registers = o->ptr;
@@ -535,9 +536,6 @@ void pfcountCommand(redisClient *c) {
card |= (uint64_t)registers[REDIS_HLL_SIZE-9] << 56;
} else {
/* Recompute it and update the cached value. */
- o = dbUnshareStringValue(c->db,c->argv[1],o);
- registers = o->ptr;
-
card = hllCount(registers);
registers[REDIS_HLL_SIZE-16] = card & 0xff;
registers[REDIS_HLL_SIZE-15] = (card >> 8) & 0xff;