if pgproc is used to represent a process and proclock represents a process and its locks of interest, then why does pgproc contain the following information about locks?

/*

* XLOG location of first XLOG record written by this backend's

* current transaction. If backend is not in a transaction or hasn't

* yet modified anything, logRec.xrecoff is zero.

*/

XLogRecPtr logRec;

/* Info about LWLock the process is currently waiting for, if any. */

bool lwWaiting; /* true if waiting for an LW lock */

bool lwExclusive; /* true if waiting for exclusive access */

struct PGPROC *lwWaitLink; /* next waiter for same LW lock */

/* Info about lock the process is currently waiting for, if any. */

/* waitLock and waitHolder are NULL if not currently waiting. */

LOCK *waitLock; /* Lock object we're sleeping on ... */

PROCLOCK *waitHolder; /* Per-holder info for awaited lock */

LOCKMODE waitLockMode; /* type of lock we're waiting for */

LOCKMASK heldLocks; /* bitmask for lock types already held on

* this lock object by this backend */

SHM_QUEUE procHolders; /* list of PROCLOCK objects for locks held

* or awaited by this backend */

};



MSN 8 with e-mail virus protection service: 2 months FREE*