Use MemoryContext API for regex memory management.
authorThomas Munro <[email protected]>
Sat, 8 Apr 2023 09:52:35 +0000 (21:52 +1200)
committerThomas Munro <[email protected]>
Sat, 8 Apr 2023 10:08:41 +0000 (22:08 +1200)
commitbea3d7e3831fa6a1395eadbad7d97cebc7aa8aee
tree9445cbc6015b1591ff310d813acfe7b1ef848ce4
parentfcd77d53217b4c4049d176072a1763d6e11ca478
Use MemoryContext API for regex memory management.

Previously, regex_t objects' memory was managed with malloc() and free()
directly.  Switch to palloc()-based memory management instead.
Advantages:

 * memory used by cached regexes is now visible with MemoryContext
   observability tools

 * cleanup can be done automatically in certain failure modes
   (something that later commits will take advantage of)

 * cleanup can be done in bulk

On the downside, there may be more fragmentation (wasted memory) due to
per-regex MemoryContext objects.  This is a problem shared with other
cached objects in PostgreSQL and can probably be improved with later
tuning.

Thanks to Noah Misch for suggesting this general approach, which
unblocks later work on interrupts.

Suggested-by: Noah Misch <[email protected]>
Reviewed-by: Tom Lane <[email protected]>
Discussion: https://postgr.es/m/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com
src/backend/regex/regprefix.c
src/backend/utils/adt/regexp.c
src/include/regex/regcustom.h