On 2018/07/05 9:40, Andres Freund wrote: > 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!
Thank you. Regards, Amit