Re: Server crashed with dense_rank on partition table.

From: Andres Freund <andres(at)anarazel(dot)de>
To: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
Cc: Michael Paquier <michael(at)paquier(dot)xyz>, Rajkumar Raghuwanshi <rajkumar(dot)raghuwanshi(at)enterprisedb(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Server crashed with dense_rank on partition table.
Date: 2018-07-05 00:40:18
Message-ID: 20180705004018.qzfrgt6olezmkl4m@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Larry Rosenman 2018-07-05 00:46:06 Re: peripatus build failures....
Previous Message Larry Rosenman 2018-07-05 00:35:28 Re: peripatus build failures....