mirror of
https://github.com/postgres/postgres.git
synced 2025-11-16 15:02:33 +03:00
Get rid of the SpinLockAcquire/SpinLockAcquire_NoHoldoff distinction
in favor of having just one set of macros that don't do HOLD/RESUME_INTERRUPTS (hence, these correspond to the old SpinLockAcquire_NoHoldoff case). Given our coding rules for spinlock use, there is no reason to allow CHECK_FOR_INTERRUPTS to be done while holding a spinlock, and also there is no situation where ImmediateInterruptOK will be true while holding a spinlock. Therefore doing HOLD/RESUME_INTERRUPTS while taking/releasing a spinlock is just a waste of cycles. Qingqing Zhou and Tom Lane.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.36 2005/12/11 21:02:18 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.37 2005/12/29 18:08:05 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "access/clog.h"
|
||||
#include "access/multixact.h"
|
||||
#include "access/subtrans.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/lwlock.h"
|
||||
#include "storage/proc.h"
|
||||
#include "storage/spin.h"
|
||||
@@ -301,7 +302,7 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
bool mustwait;
|
||||
|
||||
/* Acquire mutex. Time spent holding mutex should be short! */
|
||||
SpinLockAcquire_NoHoldoff(&lock->mutex);
|
||||
SpinLockAcquire(&lock->mutex);
|
||||
|
||||
/* If retrying, allow LWLockRelease to release waiters again */
|
||||
if (retry)
|
||||
@@ -340,7 +341,7 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
* memory initialization.
|
||||
*/
|
||||
if (proc == NULL)
|
||||
elog(FATAL, "cannot wait without a PGPROC structure");
|
||||
elog(PANIC, "cannot wait without a PGPROC structure");
|
||||
|
||||
proc->lwWaiting = true;
|
||||
proc->lwExclusive = (mode == LW_EXCLUSIVE);
|
||||
@@ -352,7 +353,7 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
lock->tail = proc;
|
||||
|
||||
/* Can release the mutex now */
|
||||
SpinLockRelease_NoHoldoff(&lock->mutex);
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
/*
|
||||
* Wait until awakened.
|
||||
@@ -384,7 +385,7 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
}
|
||||
|
||||
/* We are done updating shared state of the lock itself. */
|
||||
SpinLockRelease_NoHoldoff(&lock->mutex);
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
/* Add lock to list of locks held by this backend */
|
||||
held_lwlocks[num_held_lwlocks++] = lockid;
|
||||
@@ -423,7 +424,7 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
|
||||
HOLD_INTERRUPTS();
|
||||
|
||||
/* Acquire mutex. Time spent holding mutex should be short! */
|
||||
SpinLockAcquire_NoHoldoff(&lock->mutex);
|
||||
SpinLockAcquire(&lock->mutex);
|
||||
|
||||
/* If I can get the lock, do so quickly. */
|
||||
if (mode == LW_EXCLUSIVE)
|
||||
@@ -448,7 +449,7 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
|
||||
}
|
||||
|
||||
/* We are done updating shared state of the lock itself. */
|
||||
SpinLockRelease_NoHoldoff(&lock->mutex);
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
if (mustwait)
|
||||
{
|
||||
@@ -494,7 +495,7 @@ LWLockRelease(LWLockId lockid)
|
||||
held_lwlocks[i] = held_lwlocks[i + 1];
|
||||
|
||||
/* Acquire mutex. Time spent holding mutex should be short! */
|
||||
SpinLockAcquire_NoHoldoff(&lock->mutex);
|
||||
SpinLockAcquire(&lock->mutex);
|
||||
|
||||
/* Release my hold on lock */
|
||||
if (lock->exclusive > 0)
|
||||
@@ -542,7 +543,7 @@ LWLockRelease(LWLockId lockid)
|
||||
}
|
||||
|
||||
/* We are done updating shared state of the lock itself. */
|
||||
SpinLockRelease_NoHoldoff(&lock->mutex);
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
/*
|
||||
* Awaken any waiters I removed from the queue.
|
||||
|
||||
Reference in New Issue
Block a user