]> granicus.if.org Git - postgresql/commit
Put back AcceptInvalidationMessages calls in heap_openrv(_extended).
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 19 Sep 2012 21:10:44 +0000 (17:10 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 19 Sep 2012 21:10:44 +0000 (17:10 -0400)
commit111cfdadcf09aad8e242767d7575a59e63479ded
treef30035bd0f4ced89c8861eac8920a8fe73844292
parent67641fb880e8d41ece7ee9513a428ad10b17ddc5
Put back AcceptInvalidationMessages calls in heap_openrv(_extended).

These calls were removed in commit 4240e429d0c2d889d0cda23c618f94e12c13ade7
as part of a general refactoring and improvement of DDL locking.  However,
there's a problem not solved by the rewrite, which is that GRANT/REVOKE
update pg_class.relacl without taking any particular lock on the target
table as such.  If another backend fails to do AcceptInvalidationMessages,
it won't notice a recently-committed change in ACLs.  Bug #7557 from Piotr
Czachur demonstrates that there's at least one code path in 9.2.0 in which
a command fails to do any AcceptInvalidationMessages calls at all, if the
current transaction already holds all the locks it will need.

Since we're hard up against the release deadline for 9.2.1, fix this by
putting back the AcceptInvalidationMessages calls in heap_openrv and
heap_openrv_extended, thereby restoring the historical behavior in this
area.  We ought to look for a more elegant and perhaps more bulletproof
solution, but there's no time for that right now.
src/backend/access/heap/heapam.c