Skip to content

Commit cc68c8f

Browse files
committed
Clear level 0 memory when calling clear(). Fix HNSW pickling/unpickling in Python bindings.
1 parent 55644e8 commit cc68c8f

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

hnswlib/hnswalg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
170170
free(getLinkListPtr(i));
171171
}
172172
}
173+
data_level0_memory_.clear();
173174
linkLists_.clear();
174175
cur_element_count = 0;
175176
visited_list_pool_.reset(nullptr);

python_bindings/bindings.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,9 @@ class Index {
387387
memcpy(element_levels_npy, appr_alg->element_levels_.data(), appr_alg->element_levels_.size() * sizeof(int));
388388

389389
for (size_t i = 0; i < appr_alg->cur_element_count; i++) {
390-
size_t linkListSize = appr_alg->element_levels_[i] > 0 ? appr_alg->size_links_per_element_ * appr_alg->element_levels_[i] : 0;
390+
size_t linkListSize = appr_alg->size_links_per_element_ * appr_alg->element_levels_[i];
391391
if (linkListSize) {
392-
memcpy(link_list_npy + link_npy_offsets[i], appr_alg->linkLists_[i], linkListSize);
392+
memcpy(link_list_npy + link_npy_offsets[i], appr_alg->getLinkListPtr(i), linkListSize);
393393
}
394394
}
395395

@@ -583,11 +583,12 @@ class Index {
583583
if (linkListSize == 0) {
584584
appr_alg->setLinkListPtr(i, nullptr);
585585
} else {
586-
appr_alg->setLinkListPtr(i, (char*)malloc(linkListSize));
587-
if (appr_alg->getLinkListPtr(i) == nullptr)
586+
char* linkListPtr = reinterpret_cast<char*>(malloc(linkListSize));
587+
if (linkListPtr == nullptr)
588588
HNSWLIB_THROW_RUNTIME_ERROR("Not enough memory: loadIndex failed to allocate linklist");
589+
appr_alg->setLinkListPtr(i, linkListPtr);
589590

590-
memcpy(appr_alg->linkLists_[i], link_list_npy.data() + link_npy_offsets[i], linkListSize);
591+
memcpy(linkListPtr, link_list_npy.data() + link_npy_offsets[i], linkListSize);
591592
}
592593
}
593594

0 commit comments

Comments
 (0)