aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/storage/bufmgr.h59
1 files changed, 36 insertions, 23 deletions
diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h
index d7ced19c142..f7fc60815a6 100644
--- a/src/include/storage/bufmgr.h
+++ b/src/include/storage/bufmgr.h
@@ -98,7 +98,7 @@ extern PGDLLIMPORT int32 *LocalRefCount;
#define BUFFER_LOCK_EXCLUSIVE 2
/*
- * These routines are beaten on quite heavily, hence the macroization.
+ * These routines are beaten on quite heavily, hence inline.
*/
/*
@@ -120,11 +120,14 @@ extern PGDLLIMPORT int32 *LocalRefCount;
* even in non-assert-enabled builds can be significant. Thus, we've
* now demoted the range checks to assertions within the macro itself.
*/
-#define BufferIsValid(bufnum) \
-( \
- AssertMacro((bufnum) <= NBuffers && (bufnum) >= -NLocBuffer), \
- (bufnum) != InvalidBuffer \
-)
+static inline bool
+BufferIsValid(Buffer bufnum)
+{
+ Assert(bufnum <= NBuffers);
+ Assert(bufnum >= -NLocBuffer);
+
+ return bufnum != InvalidBuffer;
+}
/*
* BufferGetBlock
@@ -133,14 +136,16 @@ extern PGDLLIMPORT int32 *LocalRefCount;
* Note:
* Assumes buffer is valid.
*/
-#define BufferGetBlock(buffer) \
-( \
- AssertMacro(BufferIsValid(buffer)), \
- BufferIsLocal(buffer) ? \
- LocalBufferBlockPointers[-(buffer) - 1] \
- : \
- (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \
-)
+static inline Block
+BufferGetBlock(Buffer buffer)
+{
+ Assert(BufferIsValid(buffer));
+
+ if (BufferIsLocal(buffer))
+ return LocalBufferBlockPointers[-buffer - 1];
+ else
+ return (Block) (BufferBlocks + ((Size) (buffer - 1)) * BLCKSZ);
+}
/*
* BufferGetPageSize
@@ -153,11 +158,12 @@ extern PGDLLIMPORT int32 *LocalRefCount;
* (formatted) disk page.
*/
/* XXX should dig out of buffer descriptor */
-#define BufferGetPageSize(buffer) \
-( \
- AssertMacro(BufferIsValid(buffer)), \
- (Size)BLCKSZ \
-)
+static inline Size
+BufferGetPageSize(Buffer buffer)
+{
+ AssertMacro(BufferIsValid(buffer));
+ return (Size) BLCKSZ;
+}
/*
* BufferGetPage
@@ -166,7 +172,11 @@ extern PGDLLIMPORT int32 *LocalRefCount;
* When this is called as part of a scan, there may be a need for a nearby
* call to TestForOldSnapshot(). See the definition of that for details.
*/
-#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
+static inline Page
+BufferGetPage(Buffer buffer)
+{
+ return (Page) BufferGetBlock(buffer);
+}
/*
* prototypes for functions in bufmgr.c
@@ -201,6 +211,12 @@ extern void CheckPointBuffers(int flags);
extern BlockNumber BufferGetBlockNumber(Buffer buffer);
extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation,
ForkNumber forkNum);
+static inline BlockNumber
+RelationGetNumberOfBlocks(Relation reln)
+{
+ return RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM);
+}
+
extern void FlushOneBuffer(Buffer buffer);
extern void FlushRelationBuffers(Relation rel);
extern void FlushRelationsAllBuffers(struct SMgrRelationData **smgrs, int nrels);
@@ -215,9 +231,6 @@ extern void DropRelationsAllBuffers(struct SMgrRelationData **smgr_reln,
int nlocators);
extern void DropDatabaseBuffers(Oid dbid);
-#define RelationGetNumberOfBlocks(reln) \
- RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM)
-
extern bool BufferIsPermanent(Buffer buffer);
extern XLogRecPtr BufferGetLSNAtomic(Buffer buffer);