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).
maxoff;
BlockNumber nextpage;
- vacuum_delay_point();
-
ndeletable = 0;
page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
}
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;
Page page;
BTPageOpaque opaque;
+ vacuum_delay_point();
+
buf = _bt_getbuf(rel, blkno, BT_READ);
page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);