Skip to content

Commit ee3efcd

Browse files
committed
only freeDictIfNeeded if kvs_it->didx != -1
1 parent e6ae30d commit ee3efcd

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

src/kvstore.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,8 @@ void kvstoreIteratorReset(kvstoreIterator *kvs_it) {
638638
dictIterator *iter = &kvs_it->di;
639639
dictResetIterator(iter);
640640
/* In the safe iterator context, we may delete entries. */
641-
freeDictIfNeeded(kvs_it->kvs, kvs_it->didx);
641+
if (kvs_it->didx != -1)
642+
freeDictIfNeeded(kvs_it->kvs, kvs_it->didx);
642643
}
643644

644645
/* Returns next dictionary from the iterator, or NULL if iteration is complete.
@@ -1083,6 +1084,14 @@ int kvstoreTest(int argc, char **argv, int flags) {
10831084
assert(kvstoreSize(kvs2) == 16);
10841085
}
10851086

1087+
TEST("kvstoreIterator creating and releasing without kvstoreIteratorNextDict()") {
1088+
kvstore *kvs = kvstoreCreate(&KvstoreDictNovalTestType, 0, KVSTORE_ALLOCATE_DICTS_ON_DEMAND | KVSTORE_FREE_EMPTY_DICTS);
1089+
kvstoreIterator kvs_iter;
1090+
kvstoreIteratorInit(&kvs_iter, kvs);
1091+
kvstoreIteratorReset(&kvs_iter);
1092+
kvstoreRelease(kvs);
1093+
}
1094+
10861095
TEST("kvstoreIterator case 1: removing all keys does not delete the empty dict") {
10871096
kvstoreIteratorInit(&kvs_it, kvs1);
10881097
while((de = kvstoreIteratorNext(&kvs_it)) != NULL) {

0 commit comments

Comments
 (0)