Skip to content

Commit 0677128

Browse files
committed
Fix releasing ATX locks
1 parent 89e1be6 commit 0677128

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

src/backend/access/transam/xact.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3545,7 +3545,6 @@ void SuspendTransaction(void)
35453545
MOVELEFT(sus->CurTransactionContext, CurTransactionContext, NULL);
35463546
MOVELEFT(sus->TransactionAbortContext, TransactionAbortContext, NULL);
35473547

3548-
MemoryContextSwitchTo(CurTransactionContext);
35493548
MOVELEFT(sus->CurrentResourceOwner, CurrentResourceOwner, NULL);
35503549
MOVELEFT(sus->CurTransactionResourceOwner, CurTransactionResourceOwner, NULL);
35513550
MOVELEFT(sus->TopTransactionResourceOwner, TopTransactionResourceOwner, NULL);
@@ -3606,9 +3605,7 @@ bool ResumeTransaction(void)
36063605
CurTransactionContext = sus->CurTransactionContext;
36073606
TransactionAbortContext = sus->TransactionAbortContext;
36083607

3609-
//MemoryContextSwitchTo(CurTransactionContext);
36103608
CurrentResourceOwner = sus->CurrentResourceOwner;
3611-
Assert(*(unsigned long long*)CurrentResourceOwner != 0x7f7f7f7f7f7f7f7f);
36123609
CurTransactionResourceOwner = sus->CurTransactionResourceOwner;
36133610
TopTransactionResourceOwner = sus->TopTransactionResourceOwner;
36143611

src/backend/utils/resowner/resowner.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "postgres.h"
2222

2323
#include "access/hash.h"
24+
#include "access/xact.h"
2425
#include "storage/predicate.h"
2526
#include "storage/proc.h"
2627
#include "utils/memutils.h"
@@ -555,7 +556,7 @@ ResourceOwnerReleaseInternal(ResourceOwner owner,
555556
}
556557
else if (phase == RESOURCE_RELEASE_LOCKS)
557558
{
558-
if (isTopLevel)
559+
if (isTopLevel && getNestLevelATX() == 0)
559560
{
560561
/*
561562
* For a top-level xact we are going to release all locks (or at
@@ -578,7 +579,7 @@ ResourceOwnerReleaseInternal(ResourceOwner owner,
578579
LOCALLOCK **locks;
579580
int nlocks;
580581

581-
Assert(owner->parent != NULL);
582+
//Assert(owner->parent != NULL);
582583

583584
/*
584585
* Pass the list of locks owned by this resource owner to the lock
@@ -595,7 +596,7 @@ ResourceOwnerReleaseInternal(ResourceOwner owner,
595596
nlocks = owner->nlocks;
596597
}
597598

598-
if (isCommit)
599+
if (isCommit && !isTopLevel)
599600
LockReassignCurrentOwner(locks, nlocks);
600601
else
601602
LockReleaseCurrentOwner(locks, nlocks);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy