Re: Fix bug in multixact Oldest*MXactId initialization and access

From: Sami Imseih <samimseih(at)gmail(dot)com>
To: Yura Sokolov <y(dot)sokolov(at)postgrespro(dot)ru>
Cc: "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Andres Freund <andres(at)anarazel(dot)de>, Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>
Subject: Re: Fix bug in multixact Oldest*MXactId initialization and access
Date: 2026-02-25 21:53:09
Message-ID: CAA5RZ0tdL=3FJu593ukrk-SyqSd_DGHaOZEWo5uciQFxv2mSEg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi.

> All accesses are validated with asserts certainly.

Maybe I am missing something, but the extra asserts and wrapper
functions being proposed seem unnecessary for this purpose.
We know the total number of procs, so we just need to make this
available to all code paths that need to index by pgprocno.

If that calculation ever changes, code like multixact.c will not
need to care.

This can be done, as mentioned earlier, by defining the total
number of procs in proc.h, which can then be used by both
multixact.c and InitProcGlobal.

```
#define TOTAL_PROCS (MaxBackends + NUM_AUXILIARY_PROCS + max_prepared_xacts)
```

and to calculate where the prepared transaction procs start:

```
PreparedXactProcs = &procs[TOTAL_PROCS - max_prepared_xacts];
```

What do you think?

With regards to v3, I got a compilation warning that `GetOldestVisibleMXactId`
is an unused function.

--
Sami Imseih
Amazon Web Services (AWS)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2026-02-25 22:32:11 Fixing grouping expressions inside subqueries
Previous Message Zsolt Parragi 2026-02-25 21:39:05 Re: Hash-based MCV matching for large IN-lists