]> git.saurik.com Git - redis.git/commitdiff
Merge pull request #488 from pietern/2.6-safekeys
authorSalvatore Sanfilippo <antirez@gmail.com>
Tue, 1 May 2012 08:50:25 +0000 (01:50 -0700)
committerSalvatore Sanfilippo <antirez@gmail.com>
Tue, 1 May 2012 08:50:25 +0000 (01:50 -0700)
Use safe dictionary iterator from KEYS (fixes #487)

src/db.c
tests/unit/expire.tcl

index 3c75f6bad61d424e08318b359bee51c63746f1ba..e65106a583c1117c197b6a064537f1cb25d9936b 100644 (file)
--- 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);
index 82876ddd79076b71490b0b758c21f46300ecaff2..56a59f7680dffb3314ab785054b9db0d404c4add 100644 (file)
@@ -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}
 }