Re: Crash on SRF execution

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Crash on SRF execution
Дата
Msg-id 20150315155027.GB9324@alap3.anarazel.de
обсуждение исходный текст
Ответ на Crash on SRF execution  (Itai <itaid@outlook.com>)
Ответы Re: Crash on SRF execution  (Itai <itaid@outlook.com>)
Список pgsql-hackers
Hi,

On 2015-03-15 17:40:11 +0200, Itai wrote:
> I'm attempting to program a simple SRF function but it constantly crashes (details and code below).
>  
> Any idea why?

>  if (SRF_IS_FIRSTCALL())
>  {
>   length = 4000;
>   base_num = 1203000000;
>   list = (NumberList *)palloc(sizeof(NumberList));
>   list->pp_numbers = (Number **)palloc(sizeof(Number*) * length);
>   list->length = length;
>   i = 0;
>   for (; i < length; i++)
>   {
>    num = (Number *)palloc(sizeof(Number));
>    num->value = base_num + i;
>    num->is_even = ((base_num + i) % 2 == 0) ? 1 : 0;
>    list->pp_numbers[i] = num;
>   }
>   ereport(INFO, (errmsg("----------- data source -----------")));
>   i = 0;
>   for (; i < length; i++)
>   {
>    ereport(INFO, (errmsg("value: %d", list->pp_numbers[i]->value)));
>    ereport(INFO, (errmsg("is_even: %d", list->pp_numbers[i]->is_even)));   
>   }
>   
>   funcctx = SRF_FIRSTCALL_INIT();
>   oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
>   funcctx->user_fctx = list;
>   funcctx->max_calls = list->length;
>   if (get_call_result_type(fcinfo, NULL, &funcctx->tuple_desc) != TYPEFUNC_COMPOSITE)
>    ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
>    errmsg("check if sql function definition returns SETOF record")));
> 
>   BlessTupleDesc(funcctx->tuple_desc);
>   MemoryContextSwitchTo(oldcontext);
>  }

The palloc() for list above is in the per call memory context, but you
use it across several calls. You should allocate it in the multi call
context you use some lines below.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Crash on SRF execution
Следующее
От: Magnus Hagander
Дата:
Сообщение: Re: recovery_target_action = pause & hot_standby = off