postgres.git / summary / log / commit / refs
commit ee578921b60ef9a14eaea54b608549e4f8b14f26
Author: Andres Freund <andres@anarazel.de>
Date: Tue Mar 18 17:43:10 2025 +0000
First released in: 18.0, 17.5
smgr: Make SMgrRelation initialization safer against errors
In case the smgr_open callback failed, the ->pincount field would not be
initialized and the relation would not be put onto the unpinned_relns list.
This buglet was introduced in 21d9c3ee4ef7, in 17.
Discussion: https://postgr.es/m/3vae7l5ozvqtxmd7rr7zaeq3qkuipz365u3rtim5t5wdkr6f4g@vkgf2fogjirl
Backpatch-through: 17
src/backend/storage/smgr/smgr.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c
index 465e3356c53..bfdaac4721d 100644
--- a/src/backend/storage/smgr/smgr.c
+++ b/src/backend/storage/smgr/smgr.c
@@ -231,12 +231,12 @@ smgropen(RelFileLocator rlocator, ProcNumber backend)
reln->smgr_cached_nblocks[i] = InvalidBlockNumber;
reln->smgr_which = 0; /* we only have md.c at present */
- /* implementation-specific initialization */
- smgrsw[reln->smgr_which].smgr_open(reln);
-
/* it is not pinned yet */
reln->pincount = 0;
dlist_push_tail(&unpinned_relns, &reln->node);
+
+ /* implementation-specific initialization */
+ smgrsw[reln->smgr_which].smgr_open(reln);
}
return reln;
[parent: 09ef2f8df1cd]