Unnecessary static variable?

From: Antonin Houska <ah(at)cybertec(dot)at>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Unnecessary static variable?
Date: 2018-01-17 11:46:29
Message-ID: 16062.1516189589@localhost
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

While reading XLogPageRead() I was surprised that readLen variable is set but
not used in the read() call. Then I realized that it's declared static
although no other function uses it. Maybe it was used earlier to exit early if
sufficient amount of data was already read? I think this case is now handled
by the calling function xlogreader.c:ReadPageInternal().

I suggest to make the variable local:

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
new file mode 100644
index e42b828..c3267f5
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
*************** static XLogSegNo openLogSegNo = 0;
*** 776,792 ****
static uint32 openLogOff = 0;

/*
! * These variables are used similarly to the ones above, but for reading
! * the XLOG. Note, however, that readOff generally represents the offset
! * of the page just read, not the seek position of the FD itself, which
! * will be just past that page. readLen indicates how much of the current
! * page has been read into readBuf, and readSource indicates where we got
! * the currently open file from.
*/
static int readFile = -1;
static XLogSegNo readSegNo = 0;
static uint32 readOff = 0;
- static uint32 readLen = 0;
static XLogSource readSource = 0; /* XLOG_FROM_* code */

/*
--- 776,790 ----
static uint32 openLogOff = 0;

/*
! * These variables are used similarly to the ones above, but for reading the
! * XLOG. Note, however, that readOff generally represents the offset of the
! * page just read, not the seek position of the FD itself, which will be just
! * past that page. readSource indicates where we got the currently open file
! * from.
*/
static int readFile = -1;
static XLogSegNo readSegNo = 0;
static uint32 readOff = 0;
static XLogSource readSource = 0; /* XLOG_FROM_* code */

/*
*************** XLogPageRead(XLogReaderState *xlogreader
*** 11556,11561 ****
--- 11554,11560 ----
(XLogPageReadPrivate *) xlogreader->private_data;
int emode = private->emode;
uint32 targetPageOff;
+ uint32 readLen;
XLogSegNo targetSegNo PG_USED_FOR_ASSERTS_ONLY;

XLByteToSeg(targetPagePtr, targetSegNo, wal_segment_size);
*************** retry:
*** 11603,11609 ****
if (readFile >= 0)
close(readFile);
readFile = -1;
- readLen = 0;
readSource = 0;

return -1;
--- 11602,11607 ----
*************** retry:
*** 11618,11626 ****

/*
* If the current segment is being streamed from master, calculate how
! * much of the current page we have received already. We know the
! * requested record has been received, but this is for the benefit of
! * future calls, to allow quick exit at the top of this function.
*/
if (readSource == XLOG_FROM_STREAM)
{
--- 11616,11622 ----

/*
* If the current segment is being streamed from master, calculate how
! * much of the current page we have received already.
*/
if (readSource == XLOG_FROM_STREAM)
{
*************** retry:
*** 11648,11654 ****
}

pgstat_report_wait_start(WAIT_EVENT_WAL_READ);
! if (read(readFile, readBuf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
{
char fname[MAXFNAMELEN];

--- 11644,11650 ----
}

pgstat_report_wait_start(WAIT_EVENT_WAL_READ);
! if (read(readFile, readBuf, readLen) != readLen)
{
char fname[MAXFNAMELEN];

--
Antonin Houska
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26, A-2700 Wiener Neustadt
Web: https://www.cybertec-postgresql.com

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Geoff Winkless 2018-01-17 11:50:54 Re: proposal: alternative psql commands quit and exit
Previous Message Bernd Helmle 2018-01-17 11:32:29 Re: [HACKERS] Deadlock in XLogInsert at AIX