| From: | Kirill Reshke <reshkekirill(at)gmail(dot)com> |
|---|---|
| To: | Michael Paquier <michael(at)paquier(dot)xyz> |
| Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Release and unpin buffers after leaving CRIT section in GIN. |
| Date: | 2026-02-17 10:14:45 |
| Message-ID: | CALdSSPj9ixr6Uf8kMs8FfcDcUWx7cQ-iysLiLJ0n-2henP1-sQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, 17 Feb 2026 at 15:07, Michael Paquier <michael(at)paquier(dot)xyz> wrote:
>
> On Tue, Feb 17, 2026 at 02:58:24PM +0500, Kirill Reshke wrote:
> > Few places in GIN code does not follow that. v1 fixes it.
>
> Yep. That sounds pretty much right. Thanks for the report.
> --
> Michael
Looks like there are two more instances of this on HEAD: in gistbuild
and log_newpage_range. Is it?
```
reshke(at)yezzey-cbdb-bench:~/cpg$ git diff
src/backend/access/gist/gistbuild.c
src/backend/access/transam/xloginsert.c
diff --git a/src/backend/access/gist/gistbuild.c
b/src/backend/access/gist/gistbuild.c
index 7f57c787f4c..8e0c083ffa7 100644
--- a/src/backend/access/gist/gistbuild.c
+++ b/src/backend/access/gist/gistbuild.c
@@ -305,10 +305,10 @@ gistbuild(Relation heap, Relation index,
IndexInfo *indexInfo)
MarkBufferDirty(buffer);
PageSetLSN(page, GistBuildLSN);
- UnlockReleaseBuffer(buffer);
-
END_CRIT_SECTION();
+ UnlockReleaseBuffer(buffer);
+
/* Scan the table, inserting all the tuples to the index. */
reltuples = table_index_build_scan(heap, index,
indexInfo, true, true,
gistBuildCallback,
diff --git a/src/backend/access/transam/xloginsert.c
b/src/backend/access/transam/xloginsert.c
index d3acaa636c3..a9a1678acc9 100644
--- a/src/backend/access/transam/xloginsert.c
+++ b/src/backend/access/transam/xloginsert.c
@@ -1355,11 +1355,12 @@ log_newpage_range(Relation rel, ForkNumber forknum,
recptr = XLogInsert(RM_XLOG_ID, XLOG_FPI);
for (i = 0; i < nbufs; i++)
- {
PageSetLSN(BufferGetPage(bufpack[i]), recptr);
- UnlockReleaseBuffer(bufpack[i]);
- }
+
END_CRIT_SECTION();
+
+ for (i = 0; i < nbufs; i++)
+ UnlockReleaseBuffer(bufpack[i]);
}
}
```
--
Best regards,
Kirill Reshke
| From | Date | Subject | |
|---|---|---|---|
| Next Message | VASUKI M | 2026-02-17 10:42:58 | Proposal: ANALYZE (MODIFIED_STATS) using autoanalyze thresholds |
| Previous Message | Michael Paquier | 2026-02-17 10:07:30 | Re: Release and unpin buffers after leaving CRIT section in GIN. |