OSDN Git Service

Update copyright to 2004.
[pg-rex/syncrep.git] / src / backend / storage / buffer / localbuf.c
index 17f86ce..703bd9a 100644 (file)
@@ -4,12 +4,12 @@
  *       local buffer manager. Fast buffer manager for temporary tables,
  *       which never need to be WAL-logged or checkpointed, etc.
  *
- * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
  *
  * 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.58 2004/08/29 04:12:47 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -19,6 +19,7 @@
 #include "storage/bufmgr.h"
 #include "storage/smgr.h"
 #include "utils/relcache.h"
+#include "utils/resowner.h"
 
 
 /*#define LBDEBUG*/
@@ -28,7 +29,7 @@ int                   NLocBuffer = 64;
 
 BufferDesc *LocalBufferDescriptors = NULL;
 Block     *LocalBufferBlockPointers = NULL;
-long      *LocalRefCount = NULL;
+int32     *LocalRefCount = NULL;
 
 static int     nextFreeLocalBuf = 0;
 
@@ -62,6 +63,8 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
 #endif
 
                        LocalRefCount[i]++;
+                       ResourceOwnerRememberBuffer(CurrentResourceOwner,
+                                                                               BufferDescriptorGetBuffer(bufHdr));
                        if (bufHdr->flags & BM_VALID)
                                *foundPtr = TRUE;
                        else
@@ -88,6 +91,8 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
                {
                        bufHdr = &LocalBufferDescriptors[b];
                        LocalRefCount[b]++;
+                       ResourceOwnerRememberBuffer(CurrentResourceOwner,
+                                                                               BufferDescriptorGetBuffer(bufHdr));
                        nextFreeLocalBuf = (b + 1) % NLocBuffer;
                        break;
                }
@@ -111,7 +116,8 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
                /* And write... */
                smgrwrite(reln,
                                  bufHdr->tag.blockNum,
-                                 (char *) MAKE_PTR(bufHdr->data));
+                                 (char *) MAKE_PTR(bufHdr->data),
+                                 true);
 
                LocalBufferFlushCount++;
        }
@@ -178,6 +184,7 @@ WriteLocalBuffer(Buffer buffer, bool release)
        {
                Assert(LocalRefCount[bufid] > 0);
                LocalRefCount[bufid]--;
+               ResourceOwnerForgetBuffer(CurrentResourceOwner, buffer);
        }
 }
 
@@ -195,10 +202,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,10 +242,10 @@ 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/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
                                         i,
-                                        buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
-                                        buf->tag.blockNum, buf->flags,
+                                        buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
+                                        buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags,
                                         buf->refcount, LocalRefCount[i]);
 
                        LocalRefCount[i] = 0;