1
0
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:
Stephen Frost
2016-04-15 21:57:15 -04:00
parent d2de44c2ce
commit 99f2f3c19a
6 changed files with 18 additions and 5 deletions

View File

@ -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();