提交 673bcf22 编写于 作者: A Asim R P

Shared buffer should not be accessed after it is unpinned

We seemed to be doing that in this case.  This was caught by enabling
memory_protect_buffer_pool GUC.
上级 3ddc470f
...@@ -299,9 +299,10 @@ getPartitionIndexNode(Oid rootOid, ...@@ -299,9 +299,10 @@ getPartitionIndexNode(Oid rootOid,
SysScanDesc sscan; SysScanDesc sscan;
Relation partRel; Relation partRel;
Relation partRuleRel; Relation partRuleRel;
Form_pg_partition partDesc;
Oid parOid; Oid parOid;
bool inctemplate = false; bool inctemplate = false;
Oid parrelid;
int parlevel;
if (Gp_role != GP_ROLE_DISPATCH) if (Gp_role != GP_ROLE_DISPATCH)
return; return;
...@@ -331,10 +332,13 @@ getPartitionIndexNode(Oid rootOid, ...@@ -331,10 +332,13 @@ getPartitionIndexNode(Oid rootOid,
sscan = systable_beginscan(partRel, PartitionParrelidParlevelParistemplateIndexId, true, sscan = systable_beginscan(partRel, PartitionParrelidParlevelParistemplateIndexId, true,
SnapshotNow, 3, scankey); SnapshotNow, 3, scankey);
tuple = systable_getnext(sscan); tuple = systable_getnext(sscan);
if (HeapTupleIsValid(tuple)) if (HeapTupleIsValid(tuple))
{ {
parOid = HeapTupleGetOid(tuple); parOid = HeapTupleGetOid(tuple);
partDesc = (Form_pg_partition) GETSTRUCT(tuple); Form_pg_partition partDesc = (Form_pg_partition) GETSTRUCT(tuple);
parrelid = partDesc->parrelid;
parlevel = partDesc->parlevel;
if (level == 0) if (level == 0)
{ {
...@@ -344,7 +348,7 @@ getPartitionIndexNode(Oid rootOid, ...@@ -344,7 +348,7 @@ getPartitionIndexNode(Oid rootOid,
/* handle root part specially */ /* handle root part specially */
*n = palloc0(sizeof(PartitionIndexNode)); *n = palloc0(sizeof(PartitionIndexNode));
(*n)->paroid = parOid; (*n)->paroid = parOid;
(*n)->parrelid = (*n)->parchildrelid = partDesc->parrelid; (*n)->parrelid = (*n)->parchildrelid = parrelid;
(*n)->isDefault = false; (*n)->isDefault = false;
} }
systable_endscan(sscan); systable_endscan(sscan);
...@@ -379,7 +383,7 @@ getPartitionIndexNode(Oid rootOid, ...@@ -379,7 +383,7 @@ getPartitionIndexNode(Oid rootOid,
child = palloc(sizeof(PartitionIndexNode)); child = palloc(sizeof(PartitionIndexNode));
memset(child, 0, sizeof(PartitionIndexNode)); memset(child, 0, sizeof(PartitionIndexNode));
child->paroid = HeapTupleGetOid(tuple); child->paroid = HeapTupleGetOid(tuple);
child->parrelid = partDesc->parrelid; child->parrelid = parrelid;
child->parchildrelid = rule_desc->parchildrelid; child->parchildrelid = rule_desc->parchildrelid;
/* For every node, we keep track of every level at which this node has default partitioning */ /* For every node, we keep track of every level at which this node has default partitioning */
...@@ -390,7 +394,7 @@ getPartitionIndexNode(Oid rootOid, ...@@ -390,7 +394,7 @@ getPartitionIndexNode(Oid rootOid,
if (rule_desc->parisdefault) if (rule_desc->parisdefault)
{ {
child->isDefault = true; child->isDefault = true;
child->defaultLevels = lappend_int(child->defaultLevels, partDesc->parlevel); child->defaultLevels = lappend_int(child->defaultLevels, parlevel);
} }
/* insert child into children */ /* insert child into children */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册