Permalink
Browse files

ZUNIONSTORE new iterator API fix backported into 2.2

  • Loading branch information...
1 parent 748a2da commit f447a7ebb4aabef7997f86bd991716b6633b903b @antirez committed May 21, 2011
Showing with 12 additions and 3 deletions.
  1. +12 −3 src/t_zset.c
View
@@ -735,10 +735,19 @@ void zunionInterGenericCommand(redisClient *c, robj *dstkey, int op) {
/* because the zsets are sorted by size, its only possible
* for sets at larger indices to hold this entry */
for (j = (i+1); j < setnum; j++) {
- dictEntry *other = dictFind(src[j].dict,dictGetEntryKey(de));
- if (other) {
- value = src[j].weight * zunionInterDictValue(other);
+ /* It is not safe to access the zset we are
+ * iterating, so explicitly check for equal object. */
+ if (src[j].dict == src[i].dict) {
+ value = src[i].weight * zunionInterDictValue(de);
zunionInterAggregate(&score,value,aggregate);
+ } else {
+ dictEntry *other;
+
+ other = dictFind(src[j].dict,dictGetEntryKey(de));
+ if (other) {
+ value = src[j].weight * zunionInterDictValue(other);
+ zunionInterAggregate(&score,value,aggregate);
+ }
}
}

0 comments on commit f447a7e

Please sign in to comment.