mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 22:41:15 +02:00
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).
This commit is contained in:
parent
49758f4703
commit
2d7f694729
@ -12,7 +12,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.140 2006/02/12 00:18:17 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.141 2006/02/14 17:20:01 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -580,8 +580,6 @@ btbulkdelete(PG_FUNCTION_ARGS)
|
|||||||
maxoff;
|
maxoff;
|
||||||
BlockNumber nextpage;
|
BlockNumber nextpage;
|
||||||
|
|
||||||
vacuum_delay_point();
|
|
||||||
|
|
||||||
ndeletable = 0;
|
ndeletable = 0;
|
||||||
page = BufferGetPage(buf);
|
page = BufferGetPage(buf);
|
||||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||||
@ -638,6 +636,10 @@ btbulkdelete(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
_bt_relbuf(rel, buf);
|
_bt_relbuf(rel, buf);
|
||||||
|
|
||||||
|
/* call vacuum_delay_point while not holding any buffer lock */
|
||||||
|
vacuum_delay_point();
|
||||||
|
|
||||||
/* And advance to next page, if any */
|
/* And advance to next page, if any */
|
||||||
if (nextpage == P_NONE)
|
if (nextpage == P_NONE)
|
||||||
break;
|
break;
|
||||||
@ -732,6 +734,8 @@ btvacuumcleanup(PG_FUNCTION_ARGS)
|
|||||||
Page page;
|
Page page;
|
||||||
BTPageOpaque opaque;
|
BTPageOpaque opaque;
|
||||||
|
|
||||||
|
vacuum_delay_point();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't use _bt_getbuf() here because it always applies
|
* We can't use _bt_getbuf() here because it always applies
|
||||||
* _bt_checkpage(), which will barf on an all-zero page. We want to
|
* _bt_checkpage(), which will barf on an all-zero page. We want to
|
||||||
|
Loading…
Reference in New Issue
Block a user