mirror of
https://github.com/postgres/postgres.git
synced 2025-11-07 19:06:32 +03:00
Cosmetic improvements to group locking.
Reflow text in lock manager README so that it fits within 80 columns. Correct some mistakes. Expand the README to explain not only why group locking exists but also the data structures that support it. Improve comments related to group locking several files. Change the name of a macro argument for improved clarity. Most of these problems were reported by Tom Lane, but I found a few of them myself. Robert Haas and Tom Lane
This commit is contained in:
@@ -1004,7 +1004,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
|
||||
int i;
|
||||
|
||||
/*
|
||||
* If group locking is in use, locks held my members of my locking group
|
||||
* If group locking is in use, locks held by members of my locking group
|
||||
* need to be included in myHeldLocks.
|
||||
*/
|
||||
if (leader != NULL)
|
||||
@@ -1050,7 +1050,8 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
|
||||
{
|
||||
/*
|
||||
* If we're part of the same locking group as this waiter, its
|
||||
* locks neither conflict with ours nor contribute to aheadRequsts.
|
||||
* locks neither conflict with ours nor contribute to
|
||||
* aheadRequests.
|
||||
*/
|
||||
if (leader != NULL && leader == proc->lockGroupLeader)
|
||||
{
|
||||
@@ -1797,9 +1798,17 @@ BecomeLockGroupMember(PGPROC *leader, int pid)
|
||||
/* PID must be valid. */
|
||||
Assert(pid != 0);
|
||||
|
||||
/* Try to join the group. */
|
||||
/*
|
||||
* Get lock protecting the group fields. Note LockHashPartitionLockByProc
|
||||
* accesses leader->pgprocno in a PGPROC that might be free. This is safe
|
||||
* because all PGPROCs' pgprocno fields are set during shared memory
|
||||
* initialization and never change thereafter; so we will acquire the
|
||||
* correct lock even if the leader PGPROC is in process of being recycled.
|
||||
*/
|
||||
leader_lwlock = LockHashPartitionLockByProc(MyProc);
|
||||
LWLockAcquire(leader_lwlock, LW_EXCLUSIVE);
|
||||
|
||||
/* Try to join the group */
|
||||
if (leader->lockGroupLeaderIdentifier == pid)
|
||||
{
|
||||
ok = true;
|
||||
|
||||
Reference in New Issue
Block a user