mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
In recordExtensionInitPriv(), keep the scan til we're done with it
For reasons of sheer brain fade, we (I) was calling systable_endscan() immediately after systable_getnext() and expecting the tuple returned by systable_getnext() to still be valid. That's clearly wrong. Move the systable_endscan() down below the tuple usage. Discovered initially by Pavel Stehule and then also by Alvaro. Add a regression test based on Alvaro's testing.
This commit is contained in:
@ -5283,8 +5283,6 @@ recordExtensionInitPriv(Oid objoid, Oid classoid, int objsubid, Acl *new_acl)
|
||||
/* There should exist only one entry or none. */
|
||||
oldtuple = systable_getnext(scan);
|
||||
|
||||
systable_endscan(scan);
|
||||
|
||||
/* If we find an entry, update it with the latest ACL. */
|
||||
if (HeapTupleIsValid(oldtuple))
|
||||
{
|
||||
@ -5340,6 +5338,8 @@ recordExtensionInitPriv(Oid objoid, Oid classoid, int objsubid, Acl *new_acl)
|
||||
CatalogUpdateIndexes(relation, tuple);
|
||||
}
|
||||
|
||||
systable_endscan(scan);
|
||||
|
||||
/* prevent error when processing objects multiple times */
|
||||
CommandCounterIncrement();
|
||||
|
||||
|
Reference in New Issue
Block a user