Skip to content

Commit d2b3a4e

Browse files
author
Arseny Kositsyn
committed
[PGPRO-12159] Removed unnecessary copying from get_rel_page().
Tags: rum
1 parent 0c009c8 commit d2b3a4e

File tree

1 file changed

+8
-28
lines changed

1 file changed

+8
-28
lines changed

src/rum_debug_funcs.c

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,6 @@ get_rel_from_name(text *relName)
340340
static Page
341341
get_rel_page(Relation rel, BlockNumber blkNo)
342342
{
343-
bytea *rawPage;
344-
char *rawPageData;
345-
int rawPageSize;
346343
Buffer buf;
347344
Page page;
348345

@@ -352,35 +349,18 @@ get_rel_page(Relation rel, BlockNumber blkNo)
352349
errmsg("block number %u is out of range for relation \"%s\"",
353350
blkNo, RelationGetRelationName(rel))));
354351

355-
/* Initialize buffer to copy to */
356-
rawPage = (bytea *) palloc(BLCKSZ + VARHDRSZ);
357-
SET_VARSIZE(rawPage, BLCKSZ + VARHDRSZ);
358-
rawPageData = VARDATA(rawPage);
359-
360-
/* Take a verbatim copy of the page */
361352
buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkNo, RBM_NORMAL, NULL);
362-
LockBuffer(buf, BUFFER_LOCK_SHARE);
363-
364-
memcpy(rawPageData, BufferGetPage(buf), BLCKSZ);
365-
366-
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
367-
ReleaseBuffer(buf);
368-
369-
rawPageSize = VARSIZE_ANY_EXHDR(rawPage);
370-
371-
if (rawPageSize != BLCKSZ)
353+
if (!BufferIsValid(buf))
372354
ereport(ERROR,
373355
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
374-
errmsg("invalid page size"),
375-
errdetail("Expected %d bytes, got %d.",
376-
BLCKSZ, rawPageSize)));
377-
378-
page = palloc(rawPageSize);
379-
380-
memcpy(page, VARDATA_ANY(rawPage), rawPageSize);
356+
errmsg("could not read block %u of relation \"%s\"",
357+
blkNo, RelationGetRelationName(rel))));
381358

382-
/* Cleaning the memory that raw_page occupies */
383-
pfree(rawPage);
359+
LockBuffer(buf, BUFFER_LOCK_SHARE);
360+
page = (Page) palloc(BLCKSZ);
361+
memcpy(page, BufferGetPage(buf), BLCKSZ);
362+
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
363+
ReleaseBuffer(buf);
384364

385365
return page;
386366
}

0 commit comments

Comments
 (0)