pgsql: Remove unnecessary pfree() in g_intbig_compress().

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Remove unnecessary pfree() in g_intbig_compress().
Дата
Msg-id E1qJzoE-000CSE-C2@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Remove unnecessary pfree() in g_intbig_compress().

GiST compress functions (like all GiST opclass functions) are
supposed to be called in short-lived memory contexts, so that
minor memory leaks in them are not of concern, and indeed
explicit pfree's are likely slightly counterproductive.
But this one in g_intbig_compress() is more than
slightly counterproductive, because it's guarded by
"if (in != DatumGetArrayTypeP(entry->key))" which means
that if this test succeeds, we've detoasted the datum twice.
(And to add insult to injury, the extra detoast result is
leaked.)  Let's just drop the whole stanza, relying on the
GiST temporary context mechanism to clean up in good time.

The analogous bit in g_int_compress() is
       if (r != (ArrayType *) DatumGetPointer(entry->key))
           pfree(r);
which doesn't have the gratuitous-detoast problem so
I left it alone.  Perhaps there is a case for removing
unnecessary pfree's more widely, but I'm not sure if it's
worth the code churn.

The potential extra decompress seems expensive enough to
justify calling this a (minor) performance bug and
back-patching.

Konstantin Knizhnik, Matthias van de Meent, Tom Lane

Discussion: https://postgr.es/m/CAEze2Wi86=DxErfvf+SCB2UKmU2amKOF60BKuJOX=w-RojRn0A@mail.gmail.com

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/a6991f763df8d2125ba2d53ef241bcdc6afc26cf

Modified Files
--------------
contrib/intarray/_intbig_gist.c | 3 ---
1 file changed, 3 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Amit Langote
Дата:
Сообщение: Re: pgsql: Pass constructName to transformJsonValueExpr()
Следующее
От: Andres Freund
Дата:
Сообщение: pgsql: Release lock after encountering bogs row in vac_truncate_clog()