aboutsummaryrefslogtreecommitdiff
path: root/src/tutorial/basics.source
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-04-14 21:31:20 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-04-14 21:31:20 +0000
commitb090207cde3e6c3de12ba94b145eac83828f75b9 (patch)
treee4bbd65a7dd51bbbc064fdf05a895549f67c2beb /src/tutorial/basics.source
parent0e1acba2e61ef330e48451d488a05315e327ea76 (diff)
downloadpostgresql-b090207cde3e6c3de12ba94b145eac83828f75b9.tar.gz
postgresql-b090207cde3e6c3de12ba94b145eac83828f75b9.zip
Fix a problem introduced by my patch of 2010-01-12 that revised the way
relcache reload works. In the patched code, a relcache entry in process of being rebuilt doesn't get unhooked from the relcache hash table; which means that if a cache flush occurs due to sinval queue overrun while we're rebuilding it, the entry could get blown away by RelationCacheInvalidate, resulting in crash or misbehavior. Fix by ensuring that an entry being rebuilt has positive refcount, so it won't be seen as a target for removal if a cache flush occurs. (This will mean that the entry gets rebuilt twice in such a scenario, but that's okay.) It appears that the problem can only arise within a transaction that has previously reassigned the relfilenode of a pre-existing table, via TRUNCATE or a similar operation. Per bug #5412 from Rusty Conover. Back-patch to 8.2, same as the patch that introduced the problem. I think that the failure can't actually occur in 8.2, since it lacks the rd_newRelfilenodeSubid optimization, but let's make it work like the later branches anyway. Patch by Heikki, slightly editorialized on by me.
Diffstat (limited to 'src/tutorial/basics.source')
0 files changed, 0 insertions, 0 deletions