Re: Can SET_VARSIZE cause a memory leak?

Поиск
Список
Период
Сортировка
От Albe Laurenz
Тема Re: Can SET_VARSIZE cause a memory leak?
Дата
Msg-id A737B7A37273E048B164557ADEF4A58B5385B1FA@ntex2010i.host.magwien.gv.at
обсуждение исходный текст
Ответ на [C-function] Can SET_VARSIZE cause a memory leak?  (Николай Бабаджанян<nb@cobra.ru>)
Ответы Re: Can SET_VARSIZE cause a memory leak?  (Michael Paquier <michael.paquier@gmail.com>)
Список pgsql-general
Николай Бабаджанян wrote:
> I didn't find an easy way to convert ucs-2 bytea to utf-8, so I decided to write a C-function. Since
> ucs-2 is has fixed symbol size of 2 bytes the output bytea size may differ.
> 
> I do the following:
> 
>     bytea        *result= (bytea *)  palloc0(VARSIZE(in_bytea)); // allocating memory for the result
>     SET_VARSIZE(result, VARSIZE_ANY(in_bytea));
> 
>     ... // some calculations resulting in `result` having some trailing 0-s (since palloc0 was
> used). We don't need those, so:
> 
>     SET_VARSIZE(result, new_varsize_result+VARHDRSZ); // new_varsize_result was calculated during
> the convertion
> 
>     PG_RETURN_BYTEA_P(result);
> 
> The question is am I leaking memory by doing this, and if I am, should I use pfree() manually on each
> address that is left trailing, or is there some other way to make this work?

This is safe, and the memory will be freed at the end of the transaction.

Yours,
Laurenz Albe

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

Предыдущее
От: Николай Бабаджанян
Дата:
Сообщение: [C-function] Can SET_VARSIZE cause a memory leak?
Следующее
От: Allan Kamau
Дата:
Сообщение: Full text search on Chemistry text