From b2fa6252552ad31de320c12c2fedc5353dcdc993 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 23 Sep 2024 09:42:31 -0700 Subject: [PATCH] Fixed crash with empty index [skip ci] --- src/hnswscan.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/hnswscan.c b/src/hnswscan.c index 791ca4f..a2f6f8b 100644 --- a/src/hnswscan.c +++ b/src/hnswscan.c @@ -117,6 +117,8 @@ hnswbeginscan(Relation index, int nkeys, int norderbys) so = (HnswScanOpaque) palloc(sizeof(HnswScanOpaqueData)); so->typeInfo = HnswGetTypeInfo(index); so->first = true; + so->v.tids = NULL; + so->discarded = NULL; so->tmpCtx = AllocSetContextCreate(CurrentMemoryContext, "Hnsw scan temporary context", ALLOCSET_DEFAULT_SIZES); @@ -139,11 +141,12 @@ hnswrescan(IndexScanDesc scan, ScanKey keys, int nkeys, ScanKey orderbys, int no { HnswScanOpaque so = (HnswScanOpaque) scan->opaque; - if (!so->first) - { - pairingheap_reset(so->discarded); + if (so->v.tids != NULL) tidhash_reset(so->v.tids); - } + + if (so->discarded != NULL) + pairingheap_reset(so->discarded); + so->first = true; so->tuples = 0; MemoryContextReset(so->tmpCtx); @@ -219,6 +222,10 @@ hnswgettuple(IndexScanDesc scan, ScanDirection dir) if (!hnsw_streaming) break; + /* Empty index */ + if (so->discarded == NULL) + break; + /* Reached max number of additional tuples */ if (hnsw_ef_stream != -1 && so->tuples >= hnsw_ef_search + hnsw_ef_stream) {