Antonin Houska <a...@cybertec.at> writes: > 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: Hmm ... I agree that making the variable local is a simple improvement, but your patch also does this: > *************** 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]; and that I'm less sure is correct. At one time, I think, readLen told how much data in readBuf was actually valid. It seems not to be used for that anymore, but I don't much like the idea that readBuf is only partially filled but there is *no* persistent state indicating how much is valid. The existing coding guarantees that the answer is "XLOG_BLCKSZ", so that's fine, but this change would remove the guarantee. regards, tom lane