Insert CHECK_FOR_INTERRUPTS() calls into btree and hash index scans at the
points where we step right or left to the next page. This should ensure
reasonable response time to a query cancel request during an unsuccessful
index scan, as seen in recent gripe from Marc Cousin. It's a bit trickier
than it might seem at first glance, because CHECK_FOR_INTERRUPTS() is a no-op
if executed while holding a buffer lock. So we have to do it just at the
point where we've dropped one page lock and not yet acquired the next.
Remove CHECK_FOR_INTERRUPTS calls at the top level of btgetbitmap and
hashgetbitmap, since they're pointless given the added checks.
I think that GIST is okay already --- at least, there's a CHECK_FOR_INTERRUPTS
at a plausible-looking place in gistnext(). I don't claim to know GIN well
enough to try to poke it for this, if indeed it has a problem at all.
This is a pre-existing issue, but in view of the lack of prior complaints
I'm not going to risk back-patching.
hash.c (r1.109 -> r1.110)
hashsearch.c (r1.55 -> r1.56)
nbtree.c (r1.168 -> r1.169)
nbtsearch.c (r1.119 -> r1.120)
pgsql-committers by date
|Next:||From: Tom Lane||Date: 2009-05-05 19:59:00|
|Subject: pgsql: Install a "dead man switch" to allow the postmaster to detect |
|Previous:||From: User Bmomjian||Date: 2009-05-05 19:02:33|
|Subject: pg-migrator - pg_migrator: Change cp to use -R, not -r.|