PG-181: Segmentation fault in case of track_utility is ON.

pull/75/head
Ibrar Ahmed 2021-02-16 16:46:32 +00:00
parent b115d748a8
commit 0c9c25fbd9
1 changed files with 12 additions and 5 deletions

View File

@ -399,7 +399,8 @@ static void
pgss_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count, pgss_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count,
bool execute_once) bool execute_once)
{ {
nested_queryids[nested_level] = queryDesc->plannedstmt->queryId; if (nested_level >=0 && nested_level < max_stack_depth)
nested_queryids[nested_level] = queryDesc->plannedstmt->queryId;
nested_level++; nested_level++;
PG_TRY(); PG_TRY();
{ {
@ -408,12 +409,14 @@ pgss_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count,
else else
standard_ExecutorRun(queryDesc, direction, count, execute_once); standard_ExecutorRun(queryDesc, direction, count, execute_once);
nested_level--; nested_level--;
nested_queryids[nested_level] = UINT64CONST(0); if (nested_level >=0 && nested_level < max_stack_depth)
nested_queryids[nested_level] = UINT64CONST(0);
} }
PG_CATCH(); PG_CATCH();
{ {
nested_level--; nested_level--;
nested_queryids[nested_level] = UINT64CONST(0); if (nested_level >=0 && nested_level < max_stack_depth)
nested_queryids[nested_level] = UINT64CONST(0);
PG_RE_THROW(); PG_RE_THROW();
} }
PG_END_TRY(); PG_END_TRY();
@ -999,10 +1002,14 @@ static void pgss_store(uint64 queryId,
_snprintf(e->counters.error.message, message, message_len, ERROR_MESSAGE_LEN); _snprintf(e->counters.error.message, message, message_len, ERROR_MESSAGE_LEN);
if(nested_level > 0) if(nested_level > 0)
e->counters.info.parentid = nested_queryids[nested_level - 1]; {
if (nested_level >=0 && nested_level < max_stack_depth)
e->counters.info.parentid = nested_queryids[nested_level - 1];
}
else else
{
e->counters.info.parentid = UINT64CONST(0); e->counters.info.parentid = UINT64CONST(0);
}
e->counters.calls[kind].rows += rows; e->counters.calls[kind].rows += rows;
e->counters.blocks.shared_blks_hit += bufusage->shared_blks_hit; e->counters.blocks.shared_blks_hit += bufusage->shared_blks_hit;
e->counters.blocks.shared_blks_read += bufusage->shared_blks_read; e->counters.blocks.shared_blks_read += bufusage->shared_blks_read;