summaryrefslogtreecommitdiff
path: root/src/backend/storage/buffer
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-10-01 05:36:17 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-10-01 05:36:17 +0000
commit5999e78fc45dcb91784b64b6e9ae43f4e4f68ca2 (patch)
tree85245856f8b67b940a4982b35e7369300b2f9a2a /src/backend/storage/buffer
parentf58179669a94f3246d55d0ff31d7df85b4d46695 (diff)
downloadpostgresql-5999e78fc45dcb91784b64b6e9ae43f4e4f68ca2.tar.gz
Another round of cleanups for dynahash.c (maybe it's finally clean of
portability issues). Caller-visible data structures are now allocated on MAXALIGN boundaries, allowing safe use of datatypes wider than 'long'. Rejigger hash_create API so that caller specifies size of key and total size of entry, not size of key and size of rest of entry. This simplifies life considerably since each number is just a sizeof(), and padding issues etc. are taken care of automatically.
Diffstat (limited to 'src/backend/storage/buffer')
-rw-r--r--src/backend/storage/buffer/buf_init.c10
-rw-r--r--src/backend/storage/buffer/buf_table.c44
2 files changed, 19 insertions, 35 deletions
diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c
index 45a2e4aa16..322c45b031 100644
--- a/src/backend/storage/buffer/buf_init.c
+++ b/src/backend/storage/buffer/buf_init.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.44 2001/09/29 04:02:22 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.45 2001/10/01 05:36:13 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -280,9 +280,7 @@ BufferShmemSize(void)
int size = 0;
/* size of shmem index hash table */
- size += hash_estimate_size(SHMEM_INDEX_SIZE,
- SHMEM_INDEX_KEYSIZE,
- SHMEM_INDEX_DATASIZE);
+ size += hash_estimate_size(SHMEM_INDEX_SIZE, sizeof(ShmemIndexEnt));
/* size of buffer descriptors */
size += MAXALIGN((NBuffers + 1) * sizeof(BufferDesc));
@@ -291,9 +289,7 @@ BufferShmemSize(void)
size += NBuffers * MAXALIGN(BLCKSZ);
/* size of buffer hash table */
- size += hash_estimate_size(NBuffers,
- sizeof(BufferTag),
- sizeof(Buffer));
+ size += hash_estimate_size(NBuffers, sizeof(BufferLookupEnt));
#ifdef BMTRACE
size += (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long);
diff --git a/src/backend/storage/buffer/buf_table.c b/src/backend/storage/buffer/buf_table.c
index 671b13efa0..85b747b442 100644
--- a/src/backend/storage/buffer/buf_table.c
+++ b/src/backend/storage/buffer/buf_table.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_table.c,v 1.22 2001/09/29 04:02:22 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_table.c,v 1.23 2001/10/01 05:36:13 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -33,54 +33,42 @@
static HTAB *SharedBufHash;
-typedef struct lookup
-{
- BufferTag key;
- Buffer id;
-} LookupEnt;
/*
* Initialize shmem hash table for mapping buffers
*/
void
-InitBufTable()
+InitBufTable(void)
{
HASHCTL info;
- int hash_flags;
/* assume lock is held */
/* BufferTag maps to Buffer */
info.keysize = sizeof(BufferTag);
- info.datasize = sizeof(Buffer);
+ info.entrysize = sizeof(BufferLookupEnt);
info.hash = tag_hash;
- hash_flags = (HASH_ELEM | HASH_FUNCTION);
-
-
- SharedBufHash = (HTAB *) ShmemInitHash("Shared Buffer Lookup Table",
- NBuffers, NBuffers,
- &info, hash_flags);
+ SharedBufHash = ShmemInitHash("Shared Buffer Lookup Table",
+ NBuffers, NBuffers,
+ &info,
+ HASH_ELEM | HASH_FUNCTION);
if (!SharedBufHash)
- {
elog(FATAL, "couldn't initialize shared buffer pool Hash Tbl");
- exit(1);
- }
-
}
BufferDesc *
BufTableLookup(BufferTag *tagPtr)
{
- LookupEnt *result;
+ BufferLookupEnt *result;
bool found;
if (tagPtr->blockNum == P_NEW)
return NULL;
- result = (LookupEnt *)
- hash_search(SharedBufHash, (char *) tagPtr, HASH_FIND, &found);
+ result = (BufferLookupEnt *)
+ hash_search(SharedBufHash, (void *) tagPtr, HASH_FIND, &found);
if (!result)
{
@@ -98,7 +86,7 @@ BufTableLookup(BufferTag *tagPtr)
bool
BufTableDelete(BufferDesc *buf)
{
- LookupEnt *result;
+ BufferLookupEnt *result;
bool found;
/*
@@ -110,8 +98,8 @@ BufTableDelete(BufferDesc *buf)
buf->flags |= BM_DELETED;
- result = (LookupEnt *)
- hash_search(SharedBufHash, (char *) &(buf->tag), HASH_REMOVE, &found);
+ result = (BufferLookupEnt *)
+ hash_search(SharedBufHash, (void *) &(buf->tag), HASH_REMOVE, &found);
if (!(result && found))
{
@@ -134,15 +122,15 @@ BufTableDelete(BufferDesc *buf)
bool
BufTableInsert(BufferDesc *buf)
{
- LookupEnt *result;
+ BufferLookupEnt *result;
bool found;
/* cannot insert it twice */
Assert(buf->flags & BM_DELETED);
buf->flags &= ~(BM_DELETED);
- result = (LookupEnt *)
- hash_search(SharedBufHash, (char *) &(buf->tag), HASH_ENTER, &found);
+ result = (BufferLookupEnt *)
+ hash_search(SharedBufHash, (void *) &(buf->tag), HASH_ENTER, &found);
if (!result)
{