diff options
Diffstat (limited to 'src/include/storage/buf_internals.h')
-rw-r--r-- | src/include/storage/buf_internals.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/include/storage/buf_internals.h b/src/include/storage/buf_internals.h index bc79a329a1a..e15a86eff99 100644 --- a/src/include/storage/buf_internals.h +++ b/src/include/storage/buf_internals.h @@ -26,6 +26,7 @@ #include "storage/smgr.h" #include "storage/spin.h" #include "utils/relcache.h" +#include "utils/resowner.h" /* * Buffer state is a single 32-bit variable where following data is combined. @@ -383,6 +384,32 @@ typedef struct CkptSortItem extern PGDLLIMPORT CkptSortItem *CkptBufferIds; +/* ResourceOwner callbacks to hold buffer I/Os and pins */ +extern const ResourceOwnerDesc buffer_io_resowner_desc; +extern const ResourceOwnerDesc buffer_pin_resowner_desc; + +/* Convenience wrappers over ResourceOwnerRemember/Forget */ +static inline void +ResourceOwnerRememberBuffer(ResourceOwner owner, Buffer buffer) +{ + ResourceOwnerRemember(owner, Int32GetDatum(buffer), &buffer_pin_resowner_desc); +} +static inline void +ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer) +{ + ResourceOwnerForget(owner, Int32GetDatum(buffer), &buffer_pin_resowner_desc); +} +static inline void +ResourceOwnerRememberBufferIO(ResourceOwner owner, Buffer buffer) +{ + ResourceOwnerRemember(owner, Int32GetDatum(buffer), &buffer_io_resowner_desc); +} +static inline void +ResourceOwnerForgetBufferIO(ResourceOwner owner, Buffer buffer) +{ + ResourceOwnerForget(owner, Int32GetDatum(buffer), &buffer_io_resowner_desc); +} + /* * Internal buffer management routines */ @@ -418,6 +445,7 @@ extern void BufTableDelete(BufferTag *tagPtr, uint32 hashcode); /* localbuf.c */ extern bool PinLocalBuffer(BufferDesc *buf_hdr, bool adjust_usagecount); extern void UnpinLocalBuffer(Buffer buffer); +extern void UnpinLocalBufferNoOwner(Buffer buffer); extern PrefetchBufferResult PrefetchLocalBuffer(SMgrRelation smgr, ForkNumber forkNum, BlockNumber blockNum); |