pgsql: Add missing deflateEnd() for server-side gzip base backups
| От | Michael Paquier |
|---|---|
| Тема | pgsql: Add missing deflateEnd() for server-side gzip base backups |
| Дата | |
| Msg-id | E1w4SnY-0010Na-2Z@gemulon.postgresql.org обсуждение исходный текст |
| Список | pgsql-committers |
Add missing deflateEnd() for server-side gzip base backups The gzip basebackup sink called deflateInit2() in begin_archive() but never called deflateEnd(), leaking zlib's internal compression state (~256KB per archive) until the memory context of the base backup is destroyed. The code tree has already a matching deflateEnd() call for each deflateInit[2]() call (pgrypto, etc.), except for the file touched in this commit, so this brings more consistency for all the compression methods. The server-side LZ4 and zstd implementations require a dedicated cleanup callback as they allocate their state outside the context of a palloc(). As currently used, deflateInit2() is called once per tablespace in a single backup. Memory would slightly bloat only when dealing with many tablespaces at once, not across multiple base backups so this is not worth a backpatch. This change could matter for future uses of this code. zlib allows the definition of memory allocation and free callbacks in the z_stream object given to a deflateInit[2](). The base backup backend code relies on palloc() for the allocations and deflateEnd() internally only cleans up memory (no fd allocation for example). Author: Jianghua Yang <yjhjstz@gmail.com> Discussion: https://postgr.es/m/CAAZLFmQNJ0QNArpWEOZXwv=vbumcWKEHz-b1me5gBqRqG67EwQ@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/ded9754804bcdee60d72cfb0e0aaeda03a2c2f44 Modified Files -------------- src/backend/backup/basebackup_gzip.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)
В списке pgsql-committers по дате отправления: