Re: Crash on SRF execution - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Crash on SRF execution
Date
Msg-id 20150315155027.GB9324@alap3.anarazel.de
Whole thread Raw
In response to Crash on SRF execution  (Itai <itaid@outlook.com>)
Responses Re: Crash on SRF execution
List 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 by date:

Previous
From: Tom Lane
Date:
Subject: Re: Crash on SRF execution
Next
From: Magnus Hagander
Date:
Subject: Re: recovery_target_action = pause & hot_standby = off