From 3a706ba7921566b22030ff154090debb3ea5ab14 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 26 Aug 2014 10:18:56 +0200 Subject: [PATCH] Use long for rehash and iterator index in dict.h. This allows to support datasets with more than 2 billion of keys (possible in very large memory instances, this bug was actually reported). Closes issue #1814. --- src/dict.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/dict.h b/src/dict.h index 8045fb79..e4d64c64 100644 --- a/src/dict.h +++ b/src/dict.h @@ -77,7 +77,7 @@ typedef struct dict { dictType *type; void *privdata; dictht ht[2]; - int rehashidx; /* rehashing not in progress if rehashidx == -1 */ + long rehashidx; /* rehashing not in progress if rehashidx == -1 */ int iterators; /* number of iterators currently running */ } dict; @@ -87,9 +87,11 @@ typedef struct dict { * should be called while iterating. */ typedef struct dictIterator { dict *d; - int table, index, safe; + long index; + int table, safe; dictEntry *entry, *nextEntry; - long long fingerprint; /* unsafe iterator fingerprint for misuse detection */ + /* unsafe iterator fingerprint for misuse detection. */ + long long fingerprint; } dictIterator; typedef void (dictScanFunction)(void *privdata, const dictEntry *de); -- GitLab