mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Do not reuse rd_smgr in fork loop when enabling data checksums
ProcessSingleRelationByOid called RelationGetSmgr(rel), discarded the result, and then read rel->rd_smgr directly when looping over forks. Only RelationGetSmgr is authorized to read that field since a relcache invalidation resets rd_smgr to NULL. Backpatch to v19 where online checksums were introduced. Author: Mihail Nikalayeu <mihailnikalayeu@gmail.com> Reviewed-by: ChangAo Chen <cca5507@qq.com> Reviewed-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CADzfLwXGvb4Y-mqy8T+O0f_tkXR1sTDBGzP5Z=V_qcGnZ46rWg@mail.gmail.com Backpatch-through: 19
This commit is contained in:
@@ -841,11 +841,10 @@ ProcessSingleRelationByOid(Oid relationId, BufferAccessStrategy strategy)
|
||||
pgstat_report_activity(STATE_IDLE, NULL);
|
||||
return true;
|
||||
}
|
||||
RelationGetSmgr(rel);
|
||||
|
||||
for (ForkNumber fnum = 0; fnum <= MAX_FORKNUM; fnum++)
|
||||
{
|
||||
if (smgrexists(rel->rd_smgr, fnum))
|
||||
if (smgrexists(RelationGetSmgr(rel), fnum))
|
||||
{
|
||||
if (!ProcessSingleRelationFork(rel, fnum, strategy))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user