mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Fix crash if LockErrorCleanup() is called twice
The refactoring in commit 3c0fd64fec removed the clearing of
awaitedLock from LockErrorCleanup(). It's still needed, otherwise
LockErrorCleanup() during abort processing will try to update the
LOCALLOCK struct even after the lock has already been released. Put it
back.
Reported-by: Richard Guo <guofenglinux@gmail.com>
Reported-by: Robins Tharakan <tharakan@gmail.com>
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CAMbWs4_dNX1SzBmvFdoY-LxJh_4W_BjtVd5i008ihfU-wFF=eg@mail.gmail.com
Discussion: https://www.postgresql.org/message-id/18832-38e5575b1bbd7277@postgresql.org
Discussion: https://www.postgresql.org/message-id/e11a30e5-c0d8-491d-8546-3a1b50c10ad4@gmail.com
This commit is contained in:
@@ -1896,6 +1896,15 @@ GetAwaitedLock(void)
|
||||
return awaitedLock;
|
||||
}
|
||||
|
||||
/*
|
||||
* ResetAwaitedLock -- Forget that we are waiting on a lock.
|
||||
*/
|
||||
void
|
||||
ResetAwaitedLock(void)
|
||||
{
|
||||
awaitedLock = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* MarkLockClear -- mark an acquired lock as "clear"
|
||||
*
|
||||
|
||||
@@ -814,6 +814,8 @@ LockErrorCleanup(void)
|
||||
GrantAwaitedLock();
|
||||
}
|
||||
|
||||
ResetAwaitedLock();
|
||||
|
||||
LWLockRelease(partitionLock);
|
||||
|
||||
RESUME_INTERRUPTS();
|
||||
|
||||
Reference in New Issue
Block a user