Re: Server crashed with dense_rank on partition table.

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Server crashed with dense_rank on partition table.
Дата
Msg-id 20180705004018.qzfrgt6olezmkl4m@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: Server crashed with dense_rank on partition table.  (Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>)
Ответы Re: Server crashed with dense_rank on partition table.  (Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>)
Список pgsql-hackers
On 2018-07-02 17:14:14 +0900, Amit Langote wrote:
> I studied this a bit and found a bug that's causing the crash.
> 
> The above mentioned commit has this hunk:
> 
> @@ -1309,6 +1311,9 @@ hypothetical_dense_rank_final(PG_FUNCTION_ARGS)
>          PG_RETURN_INT64(rank);
> 
>      osastate = (OSAPerGroupState *) PG_GETARG_POINTER(0);
> +    econtext = osastate->qstate->econtext;
> +    if (!econtext)
> +        osastate->qstate->econtext = econtext =
> CreateStandaloneExprContext();
> 
> In CreateStandloneExprContext(), we have this:
> 
>     econtext->ecxt_per_query_memory = CurrentMemoryContext;
> 
>     /*
>      * Create working memory for expression evaluation in this context.
>      */
>     econtext->ecxt_per_tuple_memory =
>         AllocSetContextCreate(CurrentMemoryContext,
>                               "ExprContext",
>                               ALLOCSET_DEFAULT_SIZES);
> 
> I noticed when debugging the crashing query that CurrentMemoryContext is
> actually per-tuple memory context of some expression context of the
> calling code, which would get reset before getting here again.  So, it's
> wrong of hypothetical_dense_rank_final to call CreateStandloneExprContext
> without first switching to an actual per-query context.
> 
> Attached patch seems to fix the crash.

Thanks, that looks correct. Pushed!

- Andres


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

Предыдущее
От: Larry Rosenman
Дата:
Сообщение: Re: peripatus build failures....
Следующее
От: Larry Rosenman
Дата:
Сообщение: Re: peripatus build failures....