aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/lmgr/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/lmgr/proc.c')
-rw-r--r--src/backend/storage/lmgr/proc.c62
1 files changed, 29 insertions, 33 deletions
diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c
index 9548b6c0fa1..0ceff0ffe35 100644
--- a/src/backend/storage/lmgr/proc.c
+++ b/src/backend/storage/lmgr/proc.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/lmgr/proc.c,v 1.201 2008/06/09 18:23:05 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/lmgr/proc.c,v 1.202 2008/11/02 21:24:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -170,8 +170,8 @@ InitProcGlobal(void)
/*
* Initialize the data structures.
*/
- ProcGlobal->freeProcs = INVALID_OFFSET;
- ProcGlobal->autovacFreeProcs = INVALID_OFFSET;
+ ProcGlobal->freeProcs = NULL;
+ ProcGlobal->autovacFreeProcs = NULL;
ProcGlobal->spins_per_delay = DEFAULT_SPINS_PER_DELAY;
@@ -187,8 +187,8 @@ InitProcGlobal(void)
for (i = 0; i < MaxConnections; i++)
{
PGSemaphoreCreate(&(procs[i].sem));
- procs[i].links.next = ProcGlobal->freeProcs;
- ProcGlobal->freeProcs = MAKE_OFFSET(&procs[i]);
+ procs[i].links.next = (SHM_QUEUE *) ProcGlobal->freeProcs;
+ ProcGlobal->freeProcs = &procs[i];
}
procs = (PGPROC *) ShmemAlloc((autovacuum_max_workers) * sizeof(PGPROC));
@@ -200,8 +200,8 @@ InitProcGlobal(void)
for (i = 0; i < autovacuum_max_workers; i++)
{
PGSemaphoreCreate(&(procs[i].sem));
- procs[i].links.next = ProcGlobal->autovacFreeProcs;
- ProcGlobal->autovacFreeProcs = MAKE_OFFSET(&procs[i]);
+ procs[i].links.next = (SHM_QUEUE *) ProcGlobal->autovacFreeProcs;
+ ProcGlobal->autovacFreeProcs = &procs[i];
}
MemSet(AuxiliaryProcs, 0, NUM_AUXILIARY_PROCS * sizeof(PGPROC));
@@ -224,7 +224,6 @@ InitProcess(void)
{
/* use volatile pointer to prevent code rearrangement */
volatile PROC_HDR *procglobal = ProcGlobal;
- SHMEM_OFFSET myOffset;
int i;
/*
@@ -249,17 +248,16 @@ InitProcess(void)
set_spins_per_delay(procglobal->spins_per_delay);
if (IsAutoVacuumWorkerProcess())
- myOffset = procglobal->autovacFreeProcs;
+ MyProc = procglobal->autovacFreeProcs;
else
- myOffset = procglobal->freeProcs;
+ MyProc = procglobal->freeProcs;
- if (myOffset != INVALID_OFFSET)
+ if (MyProc != NULL)
{
- MyProc = (PGPROC *) MAKE_PTR(myOffset);
if (IsAutoVacuumWorkerProcess())
- procglobal->autovacFreeProcs = MyProc->links.next;
+ procglobal->autovacFreeProcs = (PGPROC *) MyProc->links.next;
else
- procglobal->freeProcs = MyProc->links.next;
+ procglobal->freeProcs = (PGPROC *) MyProc->links.next;
SpinLockRelease(ProcStructLock);
}
else
@@ -461,7 +459,6 @@ InitAuxiliaryProcess(void)
bool
HaveNFreeProcs(int n)
{
- SHMEM_OFFSET offset;
PGPROC *proc;
/* use volatile pointer to prevent code rearrangement */
@@ -469,12 +466,11 @@ HaveNFreeProcs(int n)
SpinLockAcquire(ProcStructLock);
- offset = procglobal->freeProcs;
+ proc = procglobal->freeProcs;
- while (n > 0 && offset != INVALID_OFFSET)
+ while (n > 0 && proc != NULL)
{
- proc = (PGPROC *) MAKE_PTR(offset);
- offset = proc->links.next;
+ proc = (PGPROC *) proc->links.next;
n--;
}
@@ -506,7 +502,7 @@ LockWaitCancel(void)
partitionLock = LockHashPartitionLock(lockAwaited->hashcode);
LWLockAcquire(partitionLock, LW_EXCLUSIVE);
- if (MyProc->links.next != INVALID_OFFSET)
+ if (MyProc->links.next != NULL)
{
/* We could not have been granted the lock yet */
RemoveFromWaitQueue(MyProc, lockAwaited->hashcode);
@@ -601,13 +597,13 @@ ProcKill(int code, Datum arg)
/* Return PGPROC structure (and semaphore) to freelist */
if (IsAutoVacuumWorkerProcess())
{
- MyProc->links.next = procglobal->autovacFreeProcs;
- procglobal->autovacFreeProcs = MAKE_OFFSET(MyProc);
+ MyProc->links.next = (SHM_QUEUE *) procglobal->autovacFreeProcs;
+ procglobal->autovacFreeProcs = MyProc;
}
else
{
- MyProc->links.next = procglobal->freeProcs;
- procglobal->freeProcs = MAKE_OFFSET(MyProc);
+ MyProc->links.next = (SHM_QUEUE *) procglobal->freeProcs;
+ procglobal->freeProcs = MyProc;
}
/* PGPROC struct isn't mine anymore */
@@ -752,7 +748,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
{
LOCKMASK aheadRequests = 0;
- proc = (PGPROC *) MAKE_PTR(waitQueue->links.next);
+ proc = (PGPROC *) waitQueue->links.next;
for (i = 0; i < waitQueue->size; i++)
{
/* Must he wait for me? */
@@ -790,7 +786,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
}
/* Nope, so advance to next waiter */
aheadRequests |= LOCKBIT_ON(proc->waitLockMode);
- proc = (PGPROC *) MAKE_PTR(proc->links.next);
+ proc = (PGPROC *) proc->links.next;
}
/*
@@ -1054,13 +1050,13 @@ ProcWakeup(PGPROC *proc, int waitStatus)
PGPROC *retProc;
/* Proc should be sleeping ... */
- if (proc->links.prev == INVALID_OFFSET ||
- proc->links.next == INVALID_OFFSET)
+ if (proc->links.prev == NULL ||
+ proc->links.next == NULL)
return NULL;
Assert(proc->waitStatus == STATUS_WAITING);
/* Save next process before we zap the list link */
- retProc = (PGPROC *) MAKE_PTR(proc->links.next);
+ retProc = (PGPROC *) proc->links.next;
/* Remove process from wait queue */
SHMQueueDelete(&(proc->links));
@@ -1097,7 +1093,7 @@ ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock)
if (queue_size == 0)
return;
- proc = (PGPROC *) MAKE_PTR(waitQueue->links.next);
+ proc = (PGPROC *) waitQueue->links.next;
while (queue_size-- > 0)
{
@@ -1130,7 +1126,7 @@ ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock)
* Cannot wake this guy. Remember his request for later checks.
*/
aheadRequests |= LOCKBIT_ON(lockmode);
- proc = (PGPROC *) MAKE_PTR(proc->links.next);
+ proc = (PGPROC *) proc->links.next;
}
}
@@ -1179,8 +1175,8 @@ CheckDeadLock(void)
* This is quicker than checking our semaphore's state, since no kernel
* call is needed, and it is safe because we hold the lock partition lock.
*/
- if (MyProc->links.prev == INVALID_OFFSET ||
- MyProc->links.next == INVALID_OFFSET)
+ if (MyProc->links.prev == NULL ||
+ MyProc->links.next == NULL)
goto check_done;
#ifdef LOCK_DEBUG