From 4a742484e776bb1c805e8053d47a12d7109f92e7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 May 2008 01:27:06 +0000 Subject: [PATCH] Persuade GIN to react to control-C in a reasonable amount of time while building a GIN index. --- src/backend/access/gin/gininsert.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index 6fa07caf5a..359d18615e 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -246,7 +246,11 @@ ginBuildCallback(Relation index, HeapTuple htup, Datum *values, uint32 nlist; while ((list = ginGetEntry(&buildstate->accum, &entry, &nlist)) != NULL) + { + /* there could be many entries, so be willing to abort here */ + CHECK_FOR_INTERRUPTS(); ginEntryInsert(index, &buildstate->ginstate, entry, list, nlist, TRUE); + } MemoryContextReset(buildstate->tmpCtx); ginInitBA(&buildstate->accum); @@ -331,9 +335,14 @@ ginbuild(PG_FUNCTION_ARGS) reltuples = IndexBuildHeapScan(heap, index, indexInfo, ginBuildCallback, (void *) &buildstate); + /* dump remaining entries to the index */ oldCtx = MemoryContextSwitchTo(buildstate.tmpCtx); while ((list = ginGetEntry(&buildstate.accum, &entry, &nlist)) != NULL) + { + /* there could be many entries, so be willing to abort here */ + CHECK_FOR_INTERRUPTS(); ginEntryInsert(index, &buildstate.ginstate, entry, list, nlist, TRUE); + } MemoryContextSwitchTo(oldCtx); MemoryContextDelete(buildstate.tmpCtx); -- 2.39.5