| From: | Daniil Davydov <3danissimo(at)gmail(dot)com> | 
|---|---|
| To: | Stepan Neretin <slpmcf(at)gmail(dot)com> | 
| Cc: | pgsql-hackers(at)postgresql(dot)org | 
| Subject: | Re: Accessing an invalid pointer in BufferManagerRelation structure | 
| Date: | 2025-04-14 06:09:52 | 
| Message-ID: | CAJDiXgj5p7oDhpo+q58=a=CwdLCN4ZqAO3zRO+e9yVBnOe7KJw@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Hi,
On Wed, Mar 26, 2025 at 2:14 PM Stepan Neretin <slpmcf(at)gmail(dot)com> wrote:
>
> The first thing we both noticed is that the macro calls a function that won't be available without an additional header. This seems a bit inconvenient.
Well, I rebased the patch onto the latest `master`
(b51f86e49a7f119004c0ce5d0be89cdf98309141) and noticed that we don't
need to include `rel.h` in `localbuf.c` directly anymore, because
`#include lmgr.h` was added in memutils.h
I guess it solves this issue. Please, see v3 patch.
> I also have a question: is the logic correct that if the relation is valid, we should fetch it rather than the other way around? Additionally, is checking only the `rd_isvalid` flag sufficient, or should we also consider the flag below?
>
> ```
> bool rd_isvalid; /* relcache entry is valid */
>
I don't think that we should check any Relation's flags here. We are
checking `RelationIsValid((bmr).rel) ?` to decide whether
BufferManagerRelation was created via BMR_REL or BMR_SMGR.
If the `rel` field is not NULL, we can definitely say that BMR_REL was
used, so we should call RelationGetSmgr in order to access smgr.
--
Best regards,
Daniil Davydov
| Attachment | Content-Type | Size | 
|---|---|---|
| v3-0001-Add-macros-for-safety-access-to-smgr.patch | text/x-patch | 9.1 KB | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Hayato Kuroda (Fujitsu) | 2025-04-14 06:15:07 | RE: Add pg_get_injection_points() for information of injection points | 
| Previous Message | Pavel Stehule | 2025-04-14 06:09:03 | Re: pg_dump --if-exists --clean when drop index that is partition of a partitioned index |