Skip to content
This repository was archived by the owner on Jul 23, 2024. It is now read-only.

Commit 1bbd1e9

Browse files
committed
HAWQ-1417. Fixed crash when ANALYZE after COPY because of invalid resource owner
1 parent 8595cdb commit 1bbd1e9

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

src/backend/commands/analyze.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num)
308308
ListCell *le1 = NULL;
309309
int successCount = 0, failCount = 0;
310310
StringInfoData failNames;
311+
ResourceOwner owner, oldOwner;
311312

312313
/**
313314
* Ensure that an ANALYZE is requested.
@@ -476,6 +477,13 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num)
476477
MemoryContextSwitchTo(analyzeStatementContext);
477478
}
478479

480+
/**
481+
* Create a resource owner to keep track of our resources even not in trasaction block
482+
*/
483+
owner = ResourceOwnerCreate(CurrentResourceOwner, "analyzeStmt");
484+
oldOwner = CurrentResourceOwner;
485+
CurrentResourceOwner = owner;
486+
479487
/**
480488
* we use preferred_seg_num as default and
481489
* compute target_seg_num based on data size and distributed type
@@ -773,6 +781,12 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num)
773781
resource = NULL;
774782
UnsetActiveQueryResource();
775783
SetActiveQueryResource(savedResource);
784+
785+
ResourceOwnerRelease(owner,
786+
RESOURCE_RELEASE_BEFORE_LOCKS,
787+
false, true);
788+
CurrentResourceOwner = oldOwner;
789+
ResourceOwnerDelete(owner);
776790

777791
/* Carry on with error handling. */
778792
PG_RE_THROW();
@@ -787,6 +801,12 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num)
787801
UnsetActiveQueryResource();
788802
SetActiveQueryResource(savedResource);
789803

804+
ResourceOwnerRelease(owner,
805+
RESOURCE_RELEASE_BEFORE_LOCKS,
806+
false, true);
807+
CurrentResourceOwner = oldOwner;
808+
ResourceOwnerDelete(owner);
809+
790810
if (bUseOwnXacts)
791811
{
792812
/**

0 commit comments

Comments
 (0)