postgrespro.git / summary / log / commit / refs
commit 050098b14e33a5d3dfabf172ebbddd20c6bb4665
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu Jun 27 15:57:10 2019 +0000
Fix use-after-free introduced in 55ed3defc966
Evidenced by failure under RELCACHE_FORCE_RELEASE (buildfarm member
prion).
Author: Amit Langote
Discussion: https://postgr.es/m/CA+HiwqGV=k_Eh4jBiQw66ivvdG+EUkrEYeHTYL1SvDj_YOYV0g@mail.gmail.com
src/backend/commands/indexcmds.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index cdbb56f1a4..579b998954 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -1059,13 +1059,11 @@ DefineIndex(Oid relationId,
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
- parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
+ parentDesc = RelationGetDescr(rel);
opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
for (i = 0; i < numberOfKeyAttributes; i++)
opfamOids[i] = get_opclass_family(classObjectId[i]);
- table_close(rel, NoLock);
-
/*
* For each partition, scan all existing indexes; if one matches
* our index definition and is not already attached to some other
@@ -1265,13 +1263,12 @@ DefineIndex(Oid relationId,
heap_freetuple(newtup);
}
}
- else
- table_close(rel, NoLock);
/*
* Indexes on partitioned tables are not themselves built, so we're
* done here.
*/
+ table_close(rel, NoLock);
if (!OidIsValid(parentIndexId))
pgstat_progress_end_command();
return address;
[parent: f2f0082ef596]