Fix mismatched deallocation functions
Tristan Partin <tristan@partin.io>
From: "Tristan Partin" <tristan@partin.io>
To: "pgsql-hackers" <pgsql-hackers@postgresql.org>
Date: 2026-05-06T23:26:42Z
Lists: pgsql-hackers
Attachments
- v1-0001-Fix-mismatched-deallocation-functions.patch (text/x-patch)
- allocators.cocci (text/plain)
In fe_memutils.h, we have two sets of allocation/deallocation functions: those that start pg_ and those that start with p. pg_malloc vs palloc, pg_free vs pfree, etc. My understanding is that we probably want to match the allocator with the deallocator whenever possible, but that is not the case in HEAD. We have quite a few mismatches. I discovered these issues when adding some __attribute__((malloc)) annotations to our allocation functions. gcc presents warnings in the form of: ../src/bin/psql/tab-complete.in.c: In function ‘psql_completion’: ../src/bin/psql/tab-complete.in.c:2143:9: warning: ‘free’ called on pointer returned from a mismatched allocation function [-Wmismatched-dealloc] 2143 | free(text_copy); | ^~~~~~~~~~~~~~~ ../src/bin/psql/tab-complete.in.c:1971:33: note: returned from ‘pnstrdup’ 1971 | char *text_copy = pnstrdup(rl_line_buffer + start, end - start); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Memory that we allocated pnstrdup() is being deallocated with free(). In actuality, this is not an issue because pnstrdup() uses malloc() internally. However, it does create a little bit of mental overhead when analyzing memory management in code paths. Warnings like this are also a barrier to annotating our memory allocation functions with __attribute__((malloc)). The supplied patch allows for a clean compliation on my Linux x86_64 machine with malloc attribute applied. I will send that patch later after a little bit more development. I generated the patch with the help of Coccinelle[0]. I'm no expert with Coccinelle, but it seemed like a good candidate to get this refactor done. You can run the attached script in your tree with the following command: spatch --sp-file allocators.cocci --allow-inconsistent-paths \ --in-place . [0]: https://coccinelle.gitlabpages.inria.fr/website/ -- Tristan Partin PostgreSQL Contributors Team AWS (https://aws.amazon.com)