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 |
||
|---|---|---|
| .github | ||
| config | ||
| contrib | ||
| doc | ||
| src | ||
| .dir-locals.el | ||
| .editorconfig | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .mailmap | ||
| aclocal.m4 | ||
| configure | ||
| configure.ac | ||
| COPYRIGHT | ||
| GNUmakefile.in | ||
| HISTORY | ||
| Makefile | ||
| meson.build | ||
| meson_options.txt | ||
| README.md | ||
PostgreSQL Database Management System
This directory contains the source code distribution of the PostgreSQL database management system.
PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.
Copyright and license information can be found in the file COPYRIGHT.
General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/devel/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/devel/installation.html.
The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.