]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
smgr: Make SMgrRelation initialization safer against errors
authorAndres Freund <andres@anarazel.de>
Tue, 18 Mar 2025 17:43:10 +0000 (13:43 -0400)
committerAndres Freund <andres@anarazel.de>
Tue, 18 Mar 2025 18:04:44 +0000 (14:04 -0400)
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

index ebe35c04de59c4507a34c51656b0459377be72be..e6cbb9b4ca22fc1cac3cc870a7d4017e84b92ea4 100644 (file)
@@ -234,12 +234,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;