diff --git a/src/db.c b/src/db.c index 3c75f6ba..e65106a5 100644 --- a/src/db.c +++ b/src/db.c @@ -255,7 +255,7 @@ void keysCommand(redisClient *c) { unsigned long numkeys = 0; void *replylen = addDeferredMultiBulkLength(c); - di = dictGetIterator(c->db->dict); + di = dictGetSafeIterator(c->db->dict); allkeys = (pattern[0] == '*' && pattern[1] == '\0'); while((de = dictNext(di)) != NULL) { sds key = dictGetKey(de); diff --git a/tests/unit/expire.tcl b/tests/unit/expire.tcl index 82876ddd..56a59f76 100644 --- a/tests/unit/expire.tcl +++ b/tests/unit/expire.tcl @@ -141,4 +141,15 @@ start_server {tags {"expire"}} { set size2 [r dbsize] list $size1 $size2 } {3 0} + + test {5 keys in, 5 keys out} { + r flushdb + r set a c + r expire a 5 + r set t c + r set e c + r set s c + r set foo b + lsort [r keys *] + } {a e foo s t} }