]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Make type cache initialization more resilient on re-entry after OOM
authorMichael Paquier <michael@paquier.xyz>
Sat, 20 Jun 2026 07:29:28 +0000 (16:29 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sat, 20 Jun 2026 07:29:28 +0000 (16:29 +0900)
commit73dab12719eec2996d8b033bb9d8bc2819cb0d4e
tree7abb47e3b12b3e36034e74a1248b5935c76f86dd
parentb85f9c00fb8822eb2142c347ce529f651dbef178
Make type cache initialization more resilient on re-entry after OOM

An out-of-memory failure while initializing the type cache hash tables
would issue an ERROR and leave a backend in a partially inconsistent
state.  Without assertions, the server would crash with a NULL pointer
dereference on initialization re-entry when doing a type lookup due to
one or both hash tables missing.  An assertion would trigger if these
are enabled in the build.

This commit changes the ordering of the type cache initialization to
become more robust on re-entry after an in-flight allocation failure:
- The two hash tables are initialized first, and can only be initialized
once.
- The initialization is considered as done once the in-progress list is
allocated in the CacheMemoryContext.  This is now the last allocation
step.
- Last, the callbacks are registered.  These can only fail with a FATAL
error, taking down the process so leaving the process in a non-complete
state is fine.

This is in the same spirit as b85f9c00fb88 and 29fb598b9cad, where
random allocation failures can make the backend go crazy in the code
paths fixed due to the static states becoming inconsistent.  Like the
other fixes, this is unlikely going to show up in practice, so no
backpatch is done.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Matthias van de Meent <boekewurm+postgres@gmail.com>
Discussion: https://postgr.es/m/e77acaac-a1b3-40b3-99ee-5769b4e453e4@gmail.com
src/backend/utils/cache/typcache.c