aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/lock.c9
-rw-r--r--src/backend/storage/lmgr/proc.c2
-rw-r--r--src/include/storage/lock.h1
3 files changed, 12 insertions, 0 deletions
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index 38a5d75bbe1..002303664aa 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -1897,6 +1897,15 @@ GetAwaitedLock(void)
}
/*
+ * ResetAwaitedLock -- Forget that we are waiting on a lock.
+ */
+void
+ResetAwaitedLock(void)
+{
+ awaitedLock = NULL;
+}
+
+/*
* MarkLockClear -- mark an acquired lock as "clear"
*
* This means that we know we have absorbed all sinval messages that other
diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c
index e4ca861a8e6..066319afe2b 100644
--- a/src/backend/storage/lmgr/proc.c
+++ b/src/backend/storage/lmgr/proc.c
@@ -814,6 +814,8 @@ LockErrorCleanup(void)
GrantAwaitedLock();
}
+ ResetAwaitedLock();
+
LWLockRelease(partitionLock);
RESUME_INTERRUPTS();
diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h
index ad4e40badbe..6f2108a44e8 100644
--- a/src/include/storage/lock.h
+++ b/src/include/storage/lock.h
@@ -588,6 +588,7 @@ extern bool LockCheckConflicts(LockMethod lockMethodTable,
extern void GrantLock(LOCK *lock, PROCLOCK *proclock, LOCKMODE lockmode);
extern void GrantAwaitedLock(void);
extern LOCALLOCK *GetAwaitedLock(void);
+extern void ResetAwaitedLock(void);
extern void RemoveFromWaitQueue(PGPROC *proc, uint32 hashcode);
extern LockData *GetLockStatusData(void);