Re: [GSoC] Question about returning bytea array

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: [GSoC] Question about returning bytea array
Дата
Msg-id CAFj8pRD1u1Jxn6ZiX-=jOp6f_V37S6Ddu0vM-TbHk-LQsQr0GQ@mail.gmail.com
обсуждение исходный текст
Ответ на [GSoC] Question about returning bytea array  (Charles Cui <charles.cui1984@gmail.com>)
Список pgsql-hackers


2018-05-17 7:03 GMT+02:00 Charles Cui <charles.cui1984@gmail.com>:
Hi Aleksander,

   I have the requirements to return a bytea array for some functions in pg_thrift plugin. 
What I did was similar to the following,

bytea** ret = palloc(len * sizeof(bytea*));
for (int i = 0; i < len; i++) {
   // allocate space
   ret[i] = palloc(size);
   // fill in ret[i]
   ...
}
PG_RETURN_POINTER(ret);
I can verify each ret[i] is correct by logging, but server crash when 
executed PG_RETURN_POINTER(ret). 
So, I am wondering what's the reason of the crash? 
and what's the recommended way (best practice) to construct a return value to be bytea array?

You should to set a size of any varlena structure.

check postgresql/src/backend/utils/adt/varlena.c code

When I started with PostgreSQL hacking my often problem was memory allocation in bad (deallocated) context. Good to use own self compiled version of PostgreSQL configured with --enable-cassert option.

Regards

Pavel


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

Предыдущее
От: Charles Cui
Дата:
Сообщение: [GSoC] Question about returning bytea array
Следующее
От: David Rowley
Дата:
Сообщение: Re: Needless additional partition check in INSERT?