aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/freespace/freespace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/freespace/freespace.c')
-rw-r--r--src/backend/storage/freespace/freespace.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c
index fec9f594a61..b20e8086157 100644
--- a/src/backend/storage/freespace/freespace.c
+++ b/src/backend/storage/freespace/freespace.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/freespace/freespace.c,v 1.4 2001/07/19 21:25:37 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/freespace/freespace.c,v 1.5 2001/09/29 04:02:23 tgl Exp $
*
*
* NOTES:
@@ -56,6 +56,7 @@
#include "storage/freespace.h"
#include "storage/itemid.h"
+#include "storage/lwlock.h"
#include "storage/shmem.h"
@@ -122,9 +123,6 @@ struct FSMChunk
};
-SPINLOCK FreeSpaceLock; /* in Shmem or created in
- * CreateSpinlocks() */
-
int MaxFSMRelations; /* these are set by guc.c */
int MaxFSMPages;
@@ -256,7 +254,7 @@ GetPageWithFreeSpace(RelFileNode *rel, Size spaceNeeded)
FSMRelation *fsmrel;
BlockNumber freepage;
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
/*
* We always add a rel to the hashtable when it is inquired about.
*/
@@ -279,7 +277,7 @@ GetPageWithFreeSpace(RelFileNode *rel, Size spaceNeeded)
fsmrel->threshold = (Size) cur_avg;
}
freepage = find_free_space(fsmrel, spaceNeeded);
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
return freepage;
}
@@ -299,7 +297,7 @@ RecordFreeSpace(RelFileNode *rel, BlockNumber page, Size spaceAvail)
/* Sanity check: ensure spaceAvail will fit into ItemLength */
AssertArg(spaceAvail < BLCKSZ);
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
/*
* We choose not to add rels to the hashtable unless they've been
* inquired about with GetPageWithFreeSpace. Also, a Record operation
@@ -308,11 +306,11 @@ RecordFreeSpace(RelFileNode *rel, BlockNumber page, Size spaceAvail)
fsmrel = lookup_fsm_rel(rel);
if (fsmrel)
fsm_record_free_space(fsmrel, page, spaceAvail);
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
}
/*
- * RecordAndGetPageWithFreeSpace - combo form to save one spinlock and
+ * RecordAndGetPageWithFreeSpace - combo form to save one lock and
* hash table lookup cycle.
*/
BlockNumber
@@ -327,7 +325,7 @@ RecordAndGetPageWithFreeSpace(RelFileNode *rel,
/* Sanity check: ensure spaceAvail will fit into ItemLength */
AssertArg(oldSpaceAvail < BLCKSZ);
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
/*
* We always add a rel to the hashtable when it is inquired about.
*/
@@ -351,7 +349,7 @@ RecordAndGetPageWithFreeSpace(RelFileNode *rel,
fsm_record_free_space(fsmrel, oldPage, oldSpaceAvail);
/* Do the Get */
freepage = find_free_space(fsmrel, spaceNeeded);
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
return freepage;
}
@@ -378,7 +376,7 @@ MultiRecordFreeSpace(RelFileNode *rel,
FSMRelation *fsmrel;
int i;
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
fsmrel = lookup_fsm_rel(rel);
if (fsmrel)
{
@@ -437,7 +435,7 @@ MultiRecordFreeSpace(RelFileNode *rel,
fsm_record_free_space(fsmrel, page, avail);
}
}
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
}
/*
@@ -452,11 +450,11 @@ FreeSpaceMapForgetRel(RelFileNode *rel)
{
FSMRelation *fsmrel;
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
fsmrel = lookup_fsm_rel(rel);
if (fsmrel)
delete_fsm_rel(fsmrel);
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
}
/*
@@ -474,14 +472,14 @@ FreeSpaceMapForgetDatabase(Oid dbid)
FSMRelation *fsmrel,
*nextrel;
- SpinAcquire(FreeSpaceLock);
+ LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE);
for (fsmrel = FreeSpaceMap->relList; fsmrel; fsmrel = nextrel)
{
nextrel = fsmrel->nextRel; /* in case we delete it */
if (fsmrel->key.tblNode == dbid)
delete_fsm_rel(fsmrel);
}
- SpinRelease(FreeSpaceLock);
+ LWLockRelease(FreeSpaceLock);
}