diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/storage/page/bufpage.c | 11 | ||||
-rw-r--r-- | src/include/access/gin.h | 20 | ||||
-rw-r--r-- | src/include/storage/bufpage.h | 8 |
3 files changed, 21 insertions, 18 deletions
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index c4af3b193fc..abfc569399e 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.79 2008/05/13 15:44:08 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.80 2008/07/13 21:50:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -260,7 +260,6 @@ Page PageGetTempPage(Page page, Size specialSize) { Size pageSize; - Size size; Page temp; PageHeader thdr; @@ -271,15 +270,13 @@ PageGetTempPage(Page page, Size specialSize) /* copy old page in */ memcpy(temp, page, pageSize); - /* clear out the middle */ - size = pageSize - SizeOfPageHeaderData; - size -= MAXALIGN(specialSize); - MemSet(PageGetContents(thdr), 0, size); - /* set high, low water marks */ thdr->pd_lower = SizeOfPageHeaderData; thdr->pd_upper = pageSize - MAXALIGN(specialSize); + /* clear out the middle */ + MemSet((char *) temp + thdr->pd_lower, 0, thdr->pd_upper - thdr->pd_lower); + return temp; } diff --git a/src/include/access/gin.h b/src/include/access/gin.h index f6a786d3db0..de29cff86ba 100644 --- a/src/include/access/gin.h +++ b/src/include/access/gin.h @@ -4,7 +4,7 @@ * * Copyright (c) 2006-2008, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.23 2008/07/11 21:06:29 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.24 2008/07/13 21:50:04 tgl Exp $ *-------------------------------------------------------------------------- */ @@ -121,17 +121,19 @@ typedef struct /* * Data (posting tree) pages */ +#define GinDataPageGetRightBound(page) ((ItemPointer) PageGetContents(page)) #define GinDataPageGetData(page) \ - (PageGetContents(page)+MAXALIGN(sizeof(ItemPointerData))) -#define GinDataPageGetRightBound(page) ((ItemPointer)PageGetContents(page)) -#define GinSizeOfItem(page) ( (GinPageIsLeaf(page)) ? sizeof(ItemPointerData) : sizeof(PostingItem) ) -#define GinDataPageGetItem(page,i) ( GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page) ) + (PageGetContents(page) + MAXALIGN(sizeof(ItemPointerData))) +#define GinSizeOfItem(page) \ + (GinPageIsLeaf(page) ? sizeof(ItemPointerData) : sizeof(PostingItem)) +#define GinDataPageGetItem(page,i) \ + (GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page)) #define GinDataPageGetFreeSpace(page) \ - ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GinPageOpaqueData)) - \ - GinPageGetOpaque(page)->maxoff * GinSizeOfItem(page) - \ - MAXALIGN(sizeof(ItemPointerData))) - + (BLCKSZ - MAXALIGN(SizeOfPageHeaderData) \ + - MAXALIGN(sizeof(ItemPointerData)) \ + - GinPageGetOpaque(page)->maxoff * GinSizeOfItem(page) \ + - MAXALIGN(sizeof(GinPageOpaqueData))) #define GIN_UNLOCK BUFFER_LOCK_UNLOCK diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index a52fb62a9fb..9a09121a697 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/bufpage.h,v 1.81 2008/06/08 22:00:48 alvherre Exp $ + * $PostgreSQL: pgsql/src/include/storage/bufpage.h,v 1.82 2008/07/13 21:50:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -206,9 +206,13 @@ typedef PageHeaderData *PageHeader; /* * PageGetContents * To be used in case the page does not contain item pointers. + * + * Note: prior to 8.3 this was not guaranteed to yield a MAXALIGN'd result. + * Now it is. Beware of old code that might think the offset to the contents + * is just SizeOfPageHeaderData rather than MAXALIGN(SizeOfPageHeaderData). */ #define PageGetContents(page) \ - ((char *) (&((PageHeader) (page))->pd_linp[0])) + ((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) /* ---------------- * macros to access page size info |