On 22 July 2016 at 13:24, Craig Ringer <cr...@2ndquadrant.com> wrote:
> > On 22 July 2016 at 07:02, Tom Lane <t...@sss.pgh.pa.us> wrote: > >> In >> >> https://www.postgresql.org/message-id/tencent_5c738eca65bad6861aa43...@qq.com >> it was pointed out that you could get an intra-function-call memory leak >> from something like >> >> LOOP >> BEGIN >> EXECUTE 'bogus command'; >> EXCEPTION WHEN OTHERS THEN >> END; >> END LOOP; > > > ... > > >> >> Another answer is to invent a third per-function memory context intended >> to hold statement-lifespan variables. >> >> > I've wanted this in the past and been surprised we don't have it, so +1 > from me. > > I don't think a few MemoryContextAlloc's are too ugly. > > I suggest that in cassert builds, or maybe just CACHE_CLOBBER_ALWAYS, the > context is reset after each call even when not cleaning up after an error. > That'll help catch mistakes and leaks. > That is, after each statement. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services