Commit 430719ca authored by antirez's avatar antirez
Browse files

Fixed bug introduced with the copy-on-write friendly iteartor

parent cc8a0f89
...@@ -686,7 +686,18 @@ void zunionInterGenericCommand(redisClient *c, robj *dstkey, int op) { ...@@ -686,7 +686,18 @@ void zunionInterGenericCommand(redisClient *c, robj *dstkey, int op) {
score = src[0].weight * zunionInterDictValue(de); score = src[0].weight * zunionInterDictValue(de);
for (j = 1; j < setnum; j++) { for (j = 1; j < setnum; j++) {
dictEntry *other = dictFind(src[j].dict,dictGetEntryKey(de)); dictEntry *other;
/* If it's the same dictionary don't lookup as we are not
* in the context of a safe iterator. It's the same
* dictionary so we are sure the element is inside.
* This happens on SINTERSTORE dest 2 mykey mykey. */
if (src[j].dict == src[0].dict) {
other = de;
} else {
other = dictFind(src[j].dict,dictGetEntryKey(de));
}
if (other) { if (other) {
value = src[j].weight * zunionInterDictValue(other); value = src[j].weight * zunionInterDictValue(other);
zunionInterAggregate(&score,value,aggregate); zunionInterAggregate(&score,value,aggregate);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment