Skip to content

Commit 13dadef

Browse files
committed
Improve coding of log_heap_clean() and heap_xlog_clean().
1 parent 88dc31e commit 13dadef

File tree

4 files changed

+33
-40
lines changed

4 files changed

+33
-40
lines changed

src/backend/access/heap/heapam.c

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.150 2003/02/13 05:35:07 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.151 2003/02/23 20:32:11 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1891,36 +1891,40 @@ heap_restrpos(HeapScanDesc scan)
18911891
}
18921892

18931893
XLogRecPtr
1894-
log_heap_clean(Relation reln, Buffer buffer, char *unused, int unlen)
1894+
log_heap_clean(Relation reln, Buffer buffer, OffsetNumber *unused, int uncnt)
18951895
{
18961896
xl_heap_clean xlrec;
18971897
XLogRecPtr recptr;
1898-
XLogRecData rdata[3];
1898+
XLogRecData rdata[2];
18991899

19001900
/* Caller should not call me on a temp relation */
19011901
Assert(!reln->rd_istemp);
19021902

19031903
xlrec.node = reln->rd_node;
19041904
xlrec.block = BufferGetBlockNumber(buffer);
1905+
19051906
rdata[0].buffer = InvalidBuffer;
19061907
rdata[0].data = (char *) &xlrec;
19071908
rdata[0].len = SizeOfHeapClean;
19081909
rdata[0].next = &(rdata[1]);
19091910

1910-
if (unlen > 0)
1911+
/*
1912+
* The unused-offsets array is not actually in the buffer, but pretend
1913+
* that it is. When XLogInsert stores the whole buffer, the offsets
1914+
* array need not be stored too.
1915+
*/
1916+
rdata[1].buffer = buffer;
1917+
if (uncnt > 0)
19111918
{
1912-
rdata[1].buffer = buffer;
1913-
rdata[1].data = unused;
1914-
rdata[1].len = unlen;
1915-
rdata[1].next = &(rdata[2]);
1919+
rdata[1].data = (char *) unused;
1920+
rdata[1].len = uncnt * sizeof(OffsetNumber);
19161921
}
19171922
else
1918-
rdata[0].next = &(rdata[2]);
1919-
1920-
rdata[2].buffer = buffer;
1921-
rdata[2].data = NULL;
1922-
rdata[2].len = 0;
1923-
rdata[2].next = NULL;
1923+
{
1924+
rdata[1].data = NULL;
1925+
rdata[1].len = 0;
1926+
}
1927+
rdata[1].next = NULL;
19241928

19251929
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_CLEAN, rdata);
19261930

@@ -2032,7 +2036,6 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
20322036
return;
20332037

20342038
reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->node);
2035-
20362039
if (!RelationIsValid(reln))
20372040
return;
20382041

@@ -2052,18 +2055,14 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
20522055

20532056
if (record->xl_len > SizeOfHeapClean)
20542057
{
2055-
OffsetNumber unbuf[BLCKSZ / sizeof(OffsetNumber)];
2056-
OffsetNumber *unused = unbuf;
2057-
char *unend;
2058+
OffsetNumber *unused;
2059+
OffsetNumber *unend;
20582060
ItemId lp;
20592061

2060-
Assert((record->xl_len - SizeOfHeapClean) <= BLCKSZ);
2061-
memcpy((char *) unbuf,
2062-
(char *) xlrec + SizeOfHeapClean,
2063-
record->xl_len - SizeOfHeapClean);
2064-
unend = (char *) unbuf + (record->xl_len - SizeOfHeapClean);
2062+
unused = (OffsetNumber *) ((char *) xlrec + SizeOfHeapClean);
2063+
unend = (OffsetNumber *) ((char *) xlrec + record->xl_len);
20652064

2066-
while ((char *) unused < unend)
2065+
while (unused < unend)
20672066
{
20682067
lp = PageGetItemId(page, *unused + 1);
20692068
lp->lp_flags &= ~LP_USED;

src/backend/commands/vacuum.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
*
1515
* IDENTIFICATION
16-
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.248 2003/02/22 00:45:05 tgl Exp $
16+
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.249 2003/02/23 20:32:12 tgl Exp $
1717
*
1818
*-------------------------------------------------------------------------
1919
*/
@@ -2386,8 +2386,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
23862386
if (vacpage->blkno == (blkno - 1) &&
23872387
vacpage->offsets_free > 0)
23882388
{
2389-
OffsetNumber unbuf[BLCKSZ / sizeof(OffsetNumber)];
2390-
OffsetNumber *unused = unbuf;
2389+
OffsetNumber unused[BLCKSZ / sizeof(OffsetNumber)];
23912390
int uncnt;
23922391

23932392
buf = ReadBuffer(onerel, vacpage->blkno);
@@ -2430,8 +2429,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
24302429
{
24312430
XLogRecPtr recptr;
24322431

2433-
recptr = log_heap_clean(onerel, buf, (char *) unused,
2434-
(char *) (&(unused[uncnt])) - (char *) unused);
2432+
recptr = log_heap_clean(onerel, buf, unused, uncnt);
24352433
PageSetLSN(page, recptr);
24362434
PageSetSUI(page, ThisStartUpID);
24372435
}
@@ -2555,8 +2553,7 @@ vacuum_heap(VRelStats *vacrelstats, Relation onerel, VacPageList vacuum_pages)
25552553
static void
25562554
vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage)
25572555
{
2558-
OffsetNumber unbuf[BLCKSZ / sizeof(OffsetNumber)];
2559-
OffsetNumber *unused = unbuf;
2556+
OffsetNumber unused[BLCKSZ / sizeof(OffsetNumber)];
25602557
int uncnt;
25612558
Page page = BufferGetPage(buffer);
25622559
ItemId itemid;
@@ -2580,8 +2577,7 @@ vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage)
25802577
{
25812578
XLogRecPtr recptr;
25822579

2583-
recptr = log_heap_clean(onerel, buffer, (char *) unused,
2584-
(char *) (&(unused[uncnt])) - (char *) unused);
2580+
recptr = log_heap_clean(onerel, buffer, unused, uncnt);
25852581
PageSetLSN(page, recptr);
25862582
PageSetSUI(page, ThisStartUpID);
25872583
}

src/backend/commands/vacuumlazy.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
*
3232
*
3333
* IDENTIFICATION
34-
* $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.24 2003/02/22 00:45:05 tgl Exp $
34+
* $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.25 2003/02/23 20:32:12 tgl Exp $
3535
*
3636
*-------------------------------------------------------------------------
3737
*/
@@ -497,8 +497,7 @@ static int
497497
lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
498498
int tupindex, LVRelStats *vacrelstats)
499499
{
500-
OffsetNumber unbuf[BLCKSZ / sizeof(OffsetNumber)];
501-
OffsetNumber *unused = unbuf;
500+
OffsetNumber unused[BLCKSZ / sizeof(OffsetNumber)];
502501
int uncnt;
503502
Page page = BufferGetPage(buffer);
504503
ItemId itemid;
@@ -524,8 +523,7 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
524523
{
525524
XLogRecPtr recptr;
526525

527-
recptr = log_heap_clean(onerel, buffer, (char *) unused,
528-
(char *) (&(unused[uncnt])) - (char *) unused);
526+
recptr = log_heap_clean(onerel, buffer, unused, uncnt);
529527
PageSetLSN(page, recptr);
530528
PageSetSUI(page, ThisStartUpID);
531529
}

src/include/access/heapam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: heapam.h,v 1.80 2003/02/13 05:35:11 momjian Exp $
10+
* $Id: heapam.h,v 1.81 2003/02/23 20:32:12 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -173,7 +173,7 @@ extern void heap_redo(XLogRecPtr lsn, XLogRecord *rptr);
173173
extern void heap_undo(XLogRecPtr lsn, XLogRecord *rptr);
174174
extern void heap_desc(char *buf, uint8 xl_info, char *rec);
175175
extern XLogRecPtr log_heap_clean(Relation reln, Buffer buffer,
176-
char *unused, int unlen);
176+
OffsetNumber *unused, int uncnt);
177177
extern XLogRecPtr log_heap_move(Relation reln, Buffer oldbuf,
178178
ItemPointerData from,
179179
Buffer newbuf, HeapTuple newtup);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy