mirror of
https://github.com/postgres/postgres.git
synced 2025-06-22 02:52:08 +03:00
Fix use-after-free introduced in 55ed3defc9
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
This commit is contained in:
@ -1059,13 +1059,11 @@ DefineIndex(Oid relationId,
|
|||||||
|
|
||||||
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
|
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
|
||||||
|
|
||||||
parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
|
parentDesc = RelationGetDescr(rel);
|
||||||
opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
|
opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
|
||||||
for (i = 0; i < numberOfKeyAttributes; i++)
|
for (i = 0; i < numberOfKeyAttributes; i++)
|
||||||
opfamOids[i] = get_opclass_family(classObjectId[i]);
|
opfamOids[i] = get_opclass_family(classObjectId[i]);
|
||||||
|
|
||||||
table_close(rel, NoLock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For each partition, scan all existing indexes; if one matches
|
* For each partition, scan all existing indexes; if one matches
|
||||||
* our index definition and is not already attached to some other
|
* our index definition and is not already attached to some other
|
||||||
@ -1265,13 +1263,12 @@ DefineIndex(Oid relationId,
|
|||||||
heap_freetuple(newtup);
|
heap_freetuple(newtup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
table_close(rel, NoLock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Indexes on partitioned tables are not themselves built, so we're
|
* Indexes on partitioned tables are not themselves built, so we're
|
||||||
* done here.
|
* done here.
|
||||||
*/
|
*/
|
||||||
|
table_close(rel, NoLock);
|
||||||
if (!OidIsValid(parentIndexId))
|
if (!OidIsValid(parentIndexId))
|
||||||
pgstat_progress_end_command();
|
pgstat_progress_end_command();
|
||||||
return address;
|
return address;
|
||||||
|
Reference in New Issue
Block a user