]> granicus.if.org Git - postgresql/commitdiff
Make LocalRefCount and PrivateRefCount arrays of int32, rather than long.
authorNeil Conway <neilc@samurai.com>
Thu, 22 Apr 2004 07:21:55 +0000 (07:21 +0000)
committerNeil Conway <neilc@samurai.com>
Thu, 22 Apr 2004 07:21:55 +0000 (07:21 +0000)
This saves a small amount of per-backend memory for LP64 machines.

src/backend/storage/buffer/buf_init.c
src/backend/storage/buffer/bufmgr.c
src/backend/storage/buffer/localbuf.c
src/include/storage/bufmgr.h

index 8bbfb49752e68d3a26d43b922669a8bd7f01c839..440b25ae512a22b2041a4f9bcd184282b7a12753 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.64 2004/04/21 18:06:30 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.65 2004/04/22 07:21:55 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,7 +21,7 @@
 BufferDesc *BufferDescriptors;
 Block     *BufferBlockPointers;
 
-long      *PrivateRefCount;    /* also used in freelist.c */
+int32     *PrivateRefCount;    /* also used in freelist.c */
 bits8     *BufferLocks;                /* flag bits showing locks I have set */
 
 /* statistics counters */
@@ -176,9 +176,11 @@ InitBufferPoolAccess(void)
        /*
         * Allocate and zero local arrays of per-buffer info.
         */
-       BufferBlockPointers = (Block *) calloc(NBuffers, sizeof(Block));
-       PrivateRefCount = (long *) calloc(NBuffers, sizeof(long));
-       BufferLocks = (bits8 *) calloc(NBuffers, sizeof(bits8));
+       BufferBlockPointers = (Block *) calloc(NBuffers,
+                                                                                  sizeof(*BufferBlockPointers));
+       PrivateRefCount = (int32 *) calloc(NBuffers,
+                                                                          sizeof(*PrivateRefCount));
+       BufferLocks = (bits8 *) calloc(NBuffers, sizeof(*BufferLocks));
 
        /*
         * Convert shmem offsets into addresses as seen by this process. This
index b57ac072445b92278b5f27cea1c62935c799dc0f..84da0ebfbe72a9ec79ac25368c6a88942f100d9b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.162 2004/04/21 18:06:30 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.163 2004/04/22 07:21:55 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,7 +59,7 @@
 bool           zero_damaged_pages = false;
 
 #ifdef NOT_USED
-int                    ShowPinTrace = 0;
+bool                   ShowPinTrace = false;
 #endif
 
 int                    BgWriterDelay = 200;
@@ -843,7 +843,7 @@ AtEOXact_Buffers(bool isCommit)
                        if (isCommit)
                                elog(WARNING,
                                         "buffer refcount leak: [%03d] "
-                                        "(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
+                                        "(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
                                         i,
                                         buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                         buf->tag.blockNum, buf->flags,
@@ -1225,7 +1225,7 @@ recheck:
                        {
                                /* the sole pin should be ours */
                                if (bufHdr->refcount != 1 || PrivateRefCount[i - 1] == 0)
-                                       elog(FATAL, "block %u of %u/%u is still referenced (private %ld, global %d)",
+                                       elog(FATAL, "block %u of %u/%u is still referenced (private %d, global %u)",
                                                 bufHdr->tag.blockNum,
                                                 bufHdr->tag.rnode.tblNode,
                                                 bufHdr->tag.rnode.relNode,
@@ -1330,8 +1330,9 @@ PrintBufferDescs(void)
                LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
                for (i = 0; i < NBuffers; ++i, ++buf)
                {
-                       elog(LOG, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
-blockNum=%u, flags=0x%x, refcount=%d %ld)",
+                       elog(LOG,
+                                "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
+                                "blockNum=%u, flags=0x%x, refcount=%u %d)",
                                 i, buf->freeNext, buf->freePrev,
                                 buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                 buf->tag.blockNum, buf->flags,
@@ -1344,7 +1345,7 @@ blockNum=%u, flags=0x%x, refcount=%d %ld)",
                /* interactive backend */
                for (i = 0; i < NBuffers; ++i, ++buf)
                {
-                       printf("[%-2d] (%u/%u, %u) flags=0x%x, refcnt=%d %ld)\n",
+                       printf("[%-2d] (%u/%u, %u) flags=0x%x, refcount=%u %d)\n",
                                   i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                   buf->tag.blockNum,
                                   buf->flags, buf->refcount, PrivateRefCount[i]);
@@ -1364,8 +1365,9 @@ PrintPinnedBufs(void)
        for (i = 0; i < NBuffers; ++i, ++buf)
        {
                if (PrivateRefCount[i] > 0)
-                       elog(WARNING, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
-blockNum=%u, flags=0x%x, refcount=%d %ld)",
+                       elog(WARNING,
+                                "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
+                                "blockNum=%u, flags=0x%x, refcount=%u %d)",
                                 i, buf->freeNext, buf->freePrev,
                                 buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                 buf->tag.blockNum, buf->flags,
@@ -1458,7 +1460,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
                                }
                                if (LocalRefCount[i] > 0)
                                {
-                                       elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%ld)",
+                                       elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%d)",
                                                 RelationGetRelationName(rel), firstDelBlock,
                                                 bufHdr->tag.blockNum, LocalRefCount[i]);
                                        return (-2);
@@ -1507,7 +1509,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
                        if (bufHdr->refcount != 0)
                        {
                                LWLockRelease(BufMgrLock);
-                               elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %ld, global %d)",
+                               elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %d, global %u)",
                                         RelationGetRelationName(rel), firstDelBlock,
                                         bufHdr->tag.blockNum,
                                         PrivateRefCount[i], bufHdr->refcount);
@@ -1565,8 +1567,9 @@ IncrBufferRefCount_Debug(char *file, int line, Buffer buffer)
        {
                BufferDesc *buf = &BufferDescriptors[buffer - 1];
 
-               fprintf(stderr, "PIN(Incr) %d rel = %u/%u, blockNum = %u, \
-refcount = %ld, file: %s, line: %d\n",
+               fprintf(stderr,
+                               "PIN(Incr) %d rel = %u/%u, blockNum = %u, "
+                               "refcount = %d, file: %s, line: %d\n",
                                buffer,
                                buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                buf->tag.blockNum,
@@ -1584,8 +1587,9 @@ ReleaseBuffer_Debug(char *file, int line, Buffer buffer)
        {
                BufferDesc *buf = &BufferDescriptors[buffer - 1];
 
-               fprintf(stderr, "UNPIN(Rel) %d rel = %u/%u, blockNum = %u, \
-refcount = %ld, file: %s, line: %d\n",
+               fprintf(stderr,
+                               "UNPIN(Rel) %d rel = %u/%u, blockNum = %u, "
+                               "refcount = %d, file: %s, line: %d\n",
                                buffer,
                                buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                buf->tag.blockNum,
@@ -1612,8 +1616,9 @@ ReleaseAndReadBuffer_Debug(char *file,
        {
                BufferDesc *buf = &BufferDescriptors[buffer - 1];
 
-               fprintf(stderr, "UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
-refcount = %ld, file: %s, line: %d\n",
+               fprintf(stderr,
+                               "UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
+                               "refcount = %d, file: %s, line: %d\n",
                                buffer,
                                buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                buf->tag.blockNum,
@@ -1623,8 +1628,9 @@ refcount = %ld, file: %s, line: %d\n",
        {
                BufferDesc *buf = &BufferDescriptors[b - 1];
 
-               fprintf(stderr, "PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
-refcount = %ld, file: %s, line: %d\n",
+               fprintf(stderr,
+                               "PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
+                               "refcount = %d, file: %s, line: %d\n",
                                b,
                                buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                buf->tag.blockNum,
@@ -1819,7 +1825,7 @@ LockBufferForCleanup(Buffer buffer)
        {
                /* There should be exactly one pin */
                if (LocalRefCount[-buffer - 1] != 1)
-                       elog(ERROR, "incorrect local pin count: %ld",
+                       elog(ERROR, "incorrect local pin count: %d",
                                 LocalRefCount[-buffer - 1]);
                /* Nobody else to wait for */
                return;
@@ -1827,7 +1833,7 @@ LockBufferForCleanup(Buffer buffer)
 
        /* There should be exactly one local pin */
        if (PrivateRefCount[buffer - 1] != 1)
-               elog(ERROR, "incorrect local pin count: %ld",
+               elog(ERROR, "incorrect local pin count: %d",
                         PrivateRefCount[buffer - 1]);
 
        bufHdr = &BufferDescriptors[buffer - 1];
index 17f86ce44e4f910e714abe62006ce7758a5895eb..ba4be8750cb491e37709b41a0f8ab20c62481c1e 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.53 2004/04/21 18:06:30 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.54 2004/04/22 07:21:55 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -28,7 +28,7 @@ int                   NLocBuffer = 64;
 
 BufferDesc *LocalBufferDescriptors = NULL;
 Block     *LocalBufferBlockPointers = NULL;
-long      *LocalRefCount = NULL;
+int32     *LocalRefCount = NULL;
 
 static int     nextFreeLocalBuf = 0;
 
@@ -195,10 +195,12 @@ InitLocalBuffer(void)
        /*
         * these aren't going away. I'm not gonna use palloc.
         */
-       LocalBufferDescriptors =
-               (BufferDesc *) calloc(NLocBuffer, sizeof(BufferDesc));
-       LocalBufferBlockPointers = (Block *) calloc(NLocBuffer, sizeof(Block));
-       LocalRefCount = (long *) calloc(NLocBuffer, sizeof(long));
+       LocalBufferDescriptors = (BufferDesc *)
+               calloc(NLocBuffer, sizeof(*LocalBufferDescriptors));
+       LocalBufferBlockPointers = (Block *)
+               calloc(NLocBuffer, sizeof(*LocalBufferBlockPointers));
+       LocalRefCount = (int32 *)
+               calloc(NLocBuffer, sizeof(*LocalRefCount));
        nextFreeLocalBuf = 0;
 
        for (i = 0; i < NLocBuffer; i++)
@@ -233,7 +235,7 @@ AtEOXact_LocalBuffers(bool isCommit)
 
                        if (isCommit)
                                elog(WARNING,
-                                        "local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
+                                        "local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
                                         i,
                                         buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
                                         buf->tag.blockNum, buf->flags,
index bfc7617583449e9984e58010fb7f101959f8a469..43a901864697c6e004c581e0196e6017e0469b01 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.76 2004/04/21 18:06:30 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.77 2004/04/22 07:21:55 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -35,12 +35,12 @@ extern int  BgWriterMaxpages;
 
 /* in buf_init.c */
 extern DLLIMPORT Block *BufferBlockPointers;
-extern long *PrivateRefCount;
+extern int32 *PrivateRefCount;
 
 /* in localbuf.c */
 extern DLLIMPORT int NLocBuffer;
 extern DLLIMPORT Block *LocalBufferBlockPointers;
-extern long *LocalRefCount;
+extern int32 *LocalRefCount;
 
 /* special pageno for bget */
 #define P_NEW  InvalidBlockNumber              /* grow the file to get a new page */