Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
b75fcf93
Commit
b75fcf93
authored
Jul 19, 2002
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Complete TODO item:
* -HOLDER/HOLDERTAB rename to PROCLOCK/PROCLOCKTAG
parent
97377048
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
200 additions
and
194 deletions
+200
-194
src/backend/storage/lmgr/README
src/backend/storage/lmgr/README
+112
-106
src/backend/storage/lmgr/deadlock.c
src/backend/storage/lmgr/deadlock.c
+6
-6
src/backend/storage/lmgr/lock.c
src/backend/storage/lmgr/lock.c
+61
-61
src/backend/storage/lmgr/proc.c
src/backend/storage/lmgr/proc.c
+2
-2
src/include/storage/lock.h
src/include/storage/lock.h
+15
-15
src/include/storage/proc.h
src/include/storage/proc.h
+4
-4
No files found.
src/backend/storage/lmgr/README
View file @
b75fcf93
This diff is collapsed.
Click to expand it.
src/backend/storage/lmgr/deadlock.c
View file @
b75fcf93
...
...
@@ -12,7 +12,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/deadlock.c,v 1.1
1 2002/07/18 23:06:19
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/deadlock.c,v 1.1
2 2002/07/19 00:17:40
momjian Exp $
*
* Interface:
*
...
...
@@ -377,7 +377,7 @@ FindLockCycleRecurse(PGPROC *checkProc,
{
PGPROC
*
proc
;
LOCK
*
lock
;
HOLDER
*
holder
;
PROCLOCK
*
holder
;
SHM_QUEUE
*
lockHolders
;
LOCKMETHODTABLE
*
lockMethodTable
;
PROC_QUEUE
*
waitQueue
;
...
...
@@ -427,8 +427,8 @@ FindLockCycleRecurse(PGPROC *checkProc,
*/
lockHolders
=
&
(
lock
->
lockHolders
);
holder
=
(
HOLDER
*
)
SHMQueueNext
(
lockHolders
,
lockHolders
,
offsetof
(
HOLDER
,
lockLink
));
holder
=
(
PROCLOCK
*
)
SHMQueueNext
(
lockHolders
,
lockHolders
,
offsetof
(
PROCLOCK
,
lockLink
));
while
(
holder
)
{
...
...
@@ -451,8 +451,8 @@ FindLockCycleRecurse(PGPROC *checkProc,
}
}
holder
=
(
HOLDER
*
)
SHMQueueNext
(
lockHolders
,
&
holder
->
lockLink
,
offsetof
(
HOLDER
,
lockLink
));
holder
=
(
PROCLOCK
*
)
SHMQueueNext
(
lockHolders
,
&
holder
->
lockLink
,
offsetof
(
PROCLOCK
,
lockLink
));
}
/*
...
...
src/backend/storage/lmgr/lock.c
View file @
b75fcf93
This diff is collapsed.
Click to expand it.
src/backend/storage/lmgr/proc.c
View file @
b75fcf93
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.12
3 2002/07/18 23:06:2
0 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.12
4 2002/07/19 00:17:4
0 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -501,7 +501,7 @@ int
ProcSleep
(
LOCKMETHODTABLE
*
lockMethodTable
,
LOCKMODE
lockmode
,
LOCK
*
lock
,
HOLDER
*
holder
)
PROCLOCK
*
holder
)
{
LWLockId
masterLock
=
lockMethodTable
->
masterLock
;
PROC_QUEUE
*
waitQueue
=
&
(
lock
->
waitProcs
);
...
...
src/include/storage/lock.h
View file @
b75fcf93
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: lock.h,v 1.6
2 2002/07/18 23:06:2
0 momjian Exp $
* $Id: lock.h,v 1.6
3 2002/07/19 00:17:4
0 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -130,7 +130,7 @@ typedef struct LOCKTAG
* tag -- uniquely identifies the object being locked
* grantMask -- bitmask for all lock types currently granted on this object.
* waitMask -- bitmask for all lock types currently awaited on this object.
* lockHolders -- list of
HOLDER
objects for this lock.
* lockHolders -- list of
PROCLOCK
objects for this lock.
* waitProcs -- queue of processes waiting for this lock.
* requested -- count of each lock type currently requested on the lock
* (includes requests already granted!!).
...
...
@@ -146,7 +146,7 @@ typedef struct LOCK
/* data */
int
grantMask
;
/* bitmask for lock types already granted */
int
waitMask
;
/* bitmask for lock types awaited */
SHM_QUEUE
lockHolders
;
/* list of
HOLDER
objects assoc. with lock */
SHM_QUEUE
lockHolders
;
/* list of
PROCLOCK
objects assoc. with lock */
PROC_QUEUE
waitProcs
;
/* list of PGPROC objects waiting on lock */
int
requested
[
MAX_LOCKMODES
];
/* counts of requested
* locks */
...
...
@@ -163,8 +163,8 @@ typedef struct LOCK
* on the same lockable object. We need to store some per-holder information
* for each such holder (or would-be holder).
*
*
HOLDERTAG is the key information needed to look up a HOLDER
item in the
* holder hashtable. A
HOLDER
TAG value uniquely identifies a lock holder.
*
PROCLOCKTAG is the key information needed to look up a PROCLOCK
item in the
* holder hashtable. A
PROCLOCK
TAG value uniquely identifies a lock holder.
*
* There are two possible kinds of holder tags: a transaction (identified
* both by the PGPROC of the backend running it, and the xact's own ID) and
...
...
@@ -180,32 +180,32 @@ typedef struct LOCK
* Otherwise, holder objects whose counts have gone to zero are recycled
* as soon as convenient.
*
* Each
HOLDER
object is linked into lists for both the associated LOCK object
* and the owning PGPROC object. Note that the
HOLDER
is entered into these
* Each
PROCLOCK
object is linked into lists for both the associated LOCK object
* and the owning PGPROC object. Note that the
PROCLOCK
is entered into these
* lists as soon as it is created, even if no lock has yet been granted.
* A PGPROC that is waiting for a lock to be granted will also be linked into
* the lock's waitProcs queue.
*/
typedef
struct
HOLDER
TAG
typedef
struct
PROCLOCK
TAG
{
SHMEM_OFFSET
lock
;
/* link to per-lockable-object information */
SHMEM_OFFSET
proc
;
/* link to PGPROC of owning backend */
TransactionId
xid
;
/* xact ID, or InvalidTransactionId */
}
HOLDER
TAG
;
}
PROCLOCK
TAG
;
typedef
struct
HOLDER
typedef
struct
PROCLOCK
{
/* tag */
HOLDER
TAG
tag
;
/* unique identifier of holder object */
PROCLOCK
TAG
tag
;
/* unique identifier of holder object */
/* data */
int
holding
[
MAX_LOCKMODES
];
/* count of locks currently held */
int
nHolding
;
/* total of holding[] array */
SHM_QUEUE
lockLink
;
/* list link for lock's list of holders */
SHM_QUEUE
procLink
;
/* list link for process's list of holders */
}
HOLDER
;
}
PROCLOCK
;
#define
HOLDER
_LOCKMETHOD(holder) \
#define
PROCLOCK
_LOCKMETHOD(holder) \
(((LOCK *) MAKE_PTR((holder).tag.lock))->tag.lockmethod)
...
...
@@ -225,9 +225,9 @@ extern bool LockReleaseAll(LOCKMETHOD lockmethod, PGPROC *proc,
bool
allxids
,
TransactionId
xid
);
extern
int
LockCheckConflicts
(
LOCKMETHODTABLE
*
lockMethodTable
,
LOCKMODE
lockmode
,
LOCK
*
lock
,
HOLDER
*
holder
,
PGPROC
*
proc
,
LOCK
*
lock
,
PROCLOCK
*
holder
,
PGPROC
*
proc
,
int
*
myHolding
);
extern
void
GrantLock
(
LOCK
*
lock
,
HOLDER
*
holder
,
LOCKMODE
lockmode
);
extern
void
GrantLock
(
LOCK
*
lock
,
PROCLOCK
*
holder
,
LOCKMODE
lockmode
);
extern
void
RemoveFromWaitQueue
(
PGPROC
*
proc
);
extern
int
LockShmemSize
(
int
maxBackends
);
extern
bool
DeadLockCheck
(
PGPROC
*
proc
);
...
...
src/include/storage/proc.h
View file @
b75fcf93
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: proc.h,v 1.5
8 2002/07/13 01:02:14
momjian Exp $
* $Id: proc.h,v 1.5
9 2002/07/19 00:17:40
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -61,12 +61,12 @@ struct PGPROC
/* 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 ... */
HOLDER
*
waitHolder
;
/* Per-holder info for awaited lock */
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
HOLDER
objects for locks held
SHM_QUEUE
procHolders
;
/* list of
PROCLOCK
objects for locks held
* or awaited by this backend */
};
...
...
@@ -101,7 +101,7 @@ extern void ProcReleaseLocks(bool isCommit);
extern
void
ProcQueueInit
(
PROC_QUEUE
*
queue
);
extern
int
ProcSleep
(
LOCKMETHODTABLE
*
lockMethodTable
,
LOCKMODE
lockmode
,
LOCK
*
lock
,
HOLDER
*
holder
);
LOCK
*
lock
,
PROCLOCK
*
holder
);
extern
PGPROC
*
ProcWakeup
(
PGPROC
*
proc
,
int
errType
);
extern
void
ProcLockWakeup
(
LOCKMETHODTABLE
*
lockMethodTable
,
LOCK
*
lock
);
extern
bool
LockWaitCancel
(
void
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment