Skip to content
This repository has been archived by the owner on Nov 21, 2024. It is now read-only.

:Fix memory leak in hnsw_gettuple #44

Merged
merged 3 commits into from
Aug 28, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions embedding.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ hnsw_gettuple(IndexScanDesc scan, ScanDirection dir)
int n_items;
size_t n_results;
label_t* results;
bool res;

/* Safety check */
if (scan->orderByData == NULL)
Expand All @@ -313,9 +314,12 @@ hnsw_gettuple(IndexScanDesc scan, ScanDirection dir)
n_items, (int)so->hnsw->meta.dim);
}

if (!hnsw_search(&so->hnsw->meta, (coord_t*)ARR_DATA_PTR(array), &n_results, &results))
elog(ERROR, "HNSW index search failed");
res = hnsw_search(&so->hnsw->meta, (coord_t*)ARR_DATA_PTR(array), &n_results, &results);
pfree(array);

if (!res)
elog(ERROR, "HNSW index search failed");

so->results = (ItemPointer)palloc(n_results*sizeof(ItemPointerData));
so->n_results = n_results;
for (size_t i = 0; i < n_results; i++)
Expand Down
2 changes: 2 additions & 0 deletions hnswalg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,8 @@ bool hnsw_search(HnswMetadata* meta, const coord_t *point, size_t* n_results, la
auto result = searchKnn(meta, point, meta->efSearch);
size_t nResults = result.size();
*results = (label_t*)malloc(nResults*sizeof(label_t));
if (*results == NULL)
return false;
for (size_t i = nResults; i-- != 0;)
{
(*results)[i] = result.top().second;
Expand Down