Re: POC: make mxidoff 64 bits
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: zengman <zengman@halodbtech.com>
Cc: pgsql-hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-01-04T18:06:06Z
Lists: pgsql-hackers
On 30/12/2025 03:49, zengman wrote:
> Hi,
>
> I'm currently looking into the `SlruReadSwitchPageSlow` function and have a question regarding the expression `&state->buf.data + bytes_read` —
> I suspect the ampersand (&) here might be misused. Would you be able to help me verify this?
>
> ```
> while (bytes_read < BLCKSZ)
> {
> ssize_t rc;
>
> rc = pg_pread(state->fd,
> &state->buf.data + bytes_read,
> BLCKSZ - bytes_read,
> offset);
> if (rc < 0)
> {
> if (errno == EINTR)
> continue;
> pg_fatal("could not read file \"%s\": %m", state->fn);
> }
> if (rc == 0)
> {
> /* unexpected EOF */
> pg_log(PG_WARNING, "unexpected EOF reading file \"%s\" at offset %u, reading as zeros",
> state->fn, (unsigned int) offset);
> memset(&state->buf.data + bytes_read, 0, BLCKSZ - bytes_read);
> break;
> }
> bytes_read += rc;
> offset += rc;
> }
> ```
>
> ```
> rc = pg_pread(state->fd,
> &state->buf.data + bytes_read,
> BLCKSZ - bytes_read,
> offset);
> memset(&state->buf.data + bytes_read, 0, BLCKSZ - bytes_read);
> ```
Yes, you're right. Good catch! Committed the fix, thanks.
- Heikki
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix partial read handling in pg_upgrade's multixact conversion
- ac94ce8194e5 19 (unreleased) landed
-
Increase timeout in multixid_conversion upgrade test
- bd43940b02b2 19 (unreleased) landed
-
Improve sanity checks on multixid members length
- ecb553ae8211 19 (unreleased) landed
-
Clarify comment on multixid offset wraparound check
- 170361d7b869 14.21 landed
- b0b52b7123ae 15.16 landed
- 7d42e2367c6b 16.12 landed
- cd1a887fe9bf 17.8 landed
- 3fbad030a24d 18.2 landed
- 366dcdaf5779 19 (unreleased) landed
-
Never store 0 as the nextMXact
- 87a350e1f284 19 (unreleased) landed
-
Add runtime checks for bogus multixact offsets
- d4b7bde4183b 19 (unreleased) landed
-
Widen MultiXactOffset to 64 bits
- bd8d9c9bdfa0 19 (unreleased) landed
-
Move pg_multixact SLRU page format definitions to a separate header
- bb3b1c4f6462 19 (unreleased) landed
-
Convert confusing macros in multixact.c to static inline functions
- 0099b9408e8c 17.0 landed
-
Index SLRUs by 64-bit integers rather than by 32-bit integers
- 4ed8f0913bfd 17.0 cited
-
Cope with possible failure of the oldest MultiXact to exist.
- b6a3444fa635 9.4.4 cited