Re: BUG #19006: Assert(BufferIsPinned) in BufferGetBlockNumber() is triggered for forwarded buffer
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Xuneng Zhou <xunengzhou@gmail.com>
Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org, Michael Paquier <michael@paquier.xyz>, Tom Lane <tgl@sss.pgh.pa.us>
Date: 2025-08-08T15:06:53Z
Lists: pgsql-bugs
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix rare bug in read_stream.c's split IO handling.
- 9110d8164169 18.0 landed
- b421223172a2 19 (unreleased) landed
Attachments
- 0001-Fix-and-refactor-read_stream.c-s-split-IO-handling.patch (application/octet-stream) patch 0001
On Fri, Aug 8, 2025 at 4:39 PM Xuneng Zhou <xunengzhou@gmail.com> wrote: > Thanks a lot for the exceptionally detailed and insightful > explanation—it’s far more comprehensive than I anticipated. It is > excellent for unpacking the intricate interplay and state transitions > between submodules, which is what makes this topic challenging to > grasp. I’ll need some time to fully digest it, so I’m bookmarking this > email for future reference. I’m also considering turning it into a > blog post after studying—it’s the kind of deep, clear writing that > could benefit more interested audiences. Well, one benefit of trying to describe a complex system from the top is that higher level stupidity can sometimes become clear... I realised that the queue wouldn't even need to be initialised or cleared if StartReadBuffers() had an explicit in/out npinned argument to transmit the count between calls along with the buffers, or examined after each call. This is a draft alternative fix that I am studying that removes quite a lot of lines and fragility, though time is not on my side so I might push the one-liner fix ahead of the upcoming freeze and then see what to do about this.