diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-02-14 17:20:17 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-02-14 17:20:17 +0000 |
commit | f5ab0a259780d63f8de7b1734ac246afce9f369d (patch) | |
tree | 7796295c23b25511f25e7c8aade157ccc93d585c | |
parent | dc9d11dc33c371d6c6f9f750e558ef138143038e (diff) | |
download | postgresql-f5ab0a259780d63f8de7b1734ac246afce9f369d.tar.gz postgresql-f5ab0a259780d63f8de7b1734ac246afce9f369d.zip |
Move btbulkdelete's vacuum_delay_point() call to a place in the loop where
we are not holding a buffer content lock; where it was, InterruptHoldoffCount
is positive and so we'd not respond to cancel signals as intended. Also
add missing vacuum_delay_point() call in btvacuumcleanup. This should fix
complaint from Evgeny Gridasov about failure to respond to SIGINT/SIGTERM
in a timely fashion (bug #2257).
-rw-r--r-- | src/backend/access/nbtree/nbtree.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 988cbc2a218..75a3568fe9d 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -12,7 +12,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.124.4.1 2005/05/07 21:32:53 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.124.4.2 2006/02/14 17:20:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -571,8 +571,6 @@ btbulkdelete(PG_FUNCTION_ARGS) maxoff; BlockNumber nextpage; - vacuum_delay_point(); - ndeletable = 0; page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); @@ -631,6 +629,10 @@ btbulkdelete(PG_FUNCTION_ARGS) } else _bt_relbuf(rel, buf); + + /* call vacuum_delay_point while not holding any buffer lock */ + vacuum_delay_point(); + /* And advance to next page, if any */ if (nextpage == P_NONE) break; @@ -724,6 +726,8 @@ btvacuumcleanup(PG_FUNCTION_ARGS) Page page; BTPageOpaque opaque; + vacuum_delay_point(); + buf = _bt_getbuf(rel, blkno, BT_READ); page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); |