Re: Memory leak of SMgrRelation object on standby

Jingtang Zhang <mrdrivingduck@gmail.com>

From: Jingtang Zhang <mrdrivingduck@gmail.com>
To: 邱宇航 <iamqyh@gmail.com>
Cc: Thomas Munro <thomas.munro@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>, pgsql-hackers@lists.postgresql.org
Date: 2025-08-25T15:56:28Z
Lists: pgsql-hackers

Attachments

Hi~

> Agree with that. Maybe we can call smgrdestroyall in startup process when
> replaying CHECKPOINT records, just like bgwriter/checkpointer, which free
> all smgr objects after any checkpoint.

That seems reasonable, in that case a startup process would behave just the
same as bgwriter or checkpointer.

I purpose a patch which calls smgrdestroyall() when redo each
XLOG_CHECKPOINT_ONLINE, so that it can keep the same frequency of calling
smgrdestroyall() as background processes on primary. I don't call it for
XLOG_CHECKPOINT_SHUTDOWN because the process is about to exit so that the
memory will go soon, and don't call it for XLOG_CHECKPOINT_REDO because it
seems to be a place holder only.

—
Regards, Jingtang

Commits

  1. Fix leak with SMgrRelations in startup process

  2. Give SMgrRelation pointers a well-defined lifetime.